ViewModel AppNavigation pour SignUp et Login

pull/51/head
Leni BEAULATON 3 weeks ago
parent 6045bfdfe6
commit 210d8c575f

@ -4,10 +4,12 @@ import com.example.what_the_fantasy.data.model.Favorite
import com.example.what_the_fantasy.data.model.Quote
import com.example.what_the_fantasy.data.model.SrcLanguage
import com.example.what_the_fantasy.data.model.User
import com.example.what_the_fantasy.ui.states.AuthUserState
import kotlinx.coroutines.flow.StateFlow
interface IServices {
fun validLogin(username : String, passwd : String, navController: (Int) -> Unit): Boolean
fun validLogin(username : String, passwd : String, userSession : StateFlow<AuthUserState>, navController: (Int) -> Unit): Boolean
fun EditUsername(username : String, index : Int) : Boolean
fun EditEmail(email : String, index : Int) : Boolean
fun EditPasswd(passwd : String, index : Int)

@ -10,17 +10,20 @@ import com.example.what_the_fantasy.data.model.Favorite
import com.example.what_the_fantasy.data.model.Quote
import com.example.what_the_fantasy.data.model.SrcLanguage
import com.example.what_the_fantasy.ui.components.hashPassword
import com.example.what_the_fantasy.ui.states.AuthUserState
import kotlinx.coroutines.flow.StateFlow
import java.time.LocalDate
class ServicesStub : IServices {
val logsUser = LogsUsers() //gestion des logs pour les utilisateurs
override fun validLogin(username : String, passwd : String, navController: (Int) -> Unit): Boolean{
override fun validLogin(username : String, passwd : String, userSession : StateFlow<AuthUserState>, navController: (Int) -> Unit): Boolean{
users.forEachIndexed { index, user ->
val hashPassWd = hashPassword(passwd)
if (user.username == username && user.password == hashPassWd) {
userSession.value.id = index
navController(index)
logsUser.logInformationUserConnect(user, "UserConnect")
return true

@ -6,13 +6,19 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.navigation.toRoute
import com.example.what_the_fantasy.data.services.ServicesStub
import com.example.what_the_fantasy.ui.screens.*
import com.example.what_the_fantasy.ui.viewModels.AuthUserViewModel
import com.example.what_the_fantasy.ui.viewModels.CurrentUserViewModel
import com.example.what_the_fantasy.ui.viewModels.SignInUserViewModel
import kotlinx.serialization.Serializable
@Serializable
@ -63,11 +69,24 @@ fun AppNavigator() {
val navController = rememberNavController()
val services = ServicesStub()
//ViewModel pour l'authentification
val authUserVM : AuthUserViewModel = viewModel()
val authState by authUserVM.userState.collectAsState()
//ViewModel pour l'inscription
val signInUserVM : SignInUserViewModel = viewModel()
val signInState by signInUserVM.userState.collectAsState()
//ViewModel pour l'utilisateur
val currentUserVM : CurrentUserViewModel = viewModel()
val currentUserState by currentUserVM.currentUserState.collectAsState()
Scaffold(
modifier = Modifier.fillMaxSize(),
containerColor = MaterialTheme.colorScheme.onPrimary
) { paddingValues ->
Box(modifier = Modifier.padding(paddingValues)) {
NavHost(navController, startDestination = Login) {
composable<Login> {
LoginPage(
@ -77,8 +96,11 @@ fun AppNavigator() {
popUpTo(Login) { inclusive = true }
}
},
authUserVM = authUserVM,
authState = authState
)
}
composable<Accueil> {
val accueil: Accueil = it.toRoute()
AccueilPage(
@ -150,6 +172,8 @@ fun AppNavigator() {
popUpTo(Login) { inclusive = true }
}
},
signInUserVM = signInUserVM,
signInState = signInState
)
}
composable<SubmitQuote> {

@ -41,14 +41,15 @@ import com.example.what_the_fantasy.ui.components.SpaceHeightComponent
import com.example.what_the_fantasy.ui.components.TitlePageComponent
import com.example.what_the_fantasy.ui.components.VisibleIconPasswordComponent
import com.example.what_the_fantasy.ui.components.hashPassword
import com.example.what_the_fantasy.ui.states.AuthUserState
import com.example.what_the_fantasy.ui.theme.colorBackground
import com.example.what_the_fantasy.ui.theme.gradienBox
import com.example.what_the_fantasy.ui.viewModels.AuthUserViewModel
@Composable
fun LoginPage(navControllerSignUp: () -> Unit, navControllerProfil: (Int) -> Unit) {
val authUserVM : AuthUserViewModel = viewModel()
val authState by authUserVM.userState.collectAsState()
fun LoginPage(navControllerSignUp: () -> Unit, navControllerProfil: (Int) -> Unit, authUserVM : AuthUserViewModel, authState : AuthUserState) {
// val authUserVM : AuthUserViewModel = viewModel()
// val authState by authUserVM.userState.collectAsState()
Box(
modifier = Modifier

@ -1,6 +1,5 @@
package com.example.what_the_fantasy.ui.screens
import android.util.Log
import android.util.Patterns
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable

@ -47,12 +47,13 @@ import com.example.what_the_fantasy.ui.theme.colorBackground
import com.example.what_the_fantasy.ui.theme.gradienBox
import com.example.what_the_fantasy.ui.components.ErrorMessageProfileComponent
import com.example.what_the_fantasy.ui.components.VisibleIconPasswordComponent
import com.example.what_the_fantasy.ui.states.SignInUserState
import com.example.what_the_fantasy.ui.viewModels.SignInUserViewModel
@Composable
fun SignUpPage(navControllerLogin: () -> Unit) {
val signInUserVM : SignInUserViewModel = viewModel()
val signInState by signInUserVM.userState.collectAsState()
fun SignUpPage(navControllerLogin: () -> Unit, signInUserVM :SignInUserViewModel,signInState : SignInUserState) {
// val signInUserVM : SignInUserViewModel = viewModel()
// val signInState by signInUserVM.userState.collectAsState()
Box(
modifier = Modifier

@ -4,6 +4,7 @@ import com.example.what_the_fantasy.data.model.SrcLanguage
import com.example.what_the_fantasy.data.model.User
data class AuthUserState (
var id : Int = -1,
val username : String = "",
val password: String = "",
)

@ -14,6 +14,9 @@ class AuthUserViewModel : ViewModel(){
val userState : StateFlow<AuthUserState> = _userState.asStateFlow()
fun setId(id : Int){
_userState.update { it.copy(id=id) }
}
fun setUsername(username : String){
_userState.update { it.copy(username=username) }
}
@ -23,6 +26,6 @@ class AuthUserViewModel : ViewModel(){
}
fun validLogin(username : String, passwd : String, navController: (Int) -> Unit) : Boolean{
return services.validLogin(username,passwd,navController)
return services.validLogin(username,passwd,userState, navController)
}
}
Loading…
Cancel
Save