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.Quote
import com.example.what_the_fantasy.data.model.SrcLanguage import com.example.what_the_fantasy.data.model.SrcLanguage
import com.example.what_the_fantasy.data.model.User 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 { 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 EditUsername(username : String, index : Int) : Boolean
fun EditEmail(email : String, index : Int) : Boolean fun EditEmail(email : String, index : Int) : Boolean
fun EditPasswd(passwd : String, index : Int) 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.Quote
import com.example.what_the_fantasy.data.model.SrcLanguage 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.components.hashPassword
import com.example.what_the_fantasy.ui.states.AuthUserState
import kotlinx.coroutines.flow.StateFlow
import java.time.LocalDate import java.time.LocalDate
class ServicesStub : IServices { class ServicesStub : IServices {
val logsUser = LogsUsers() //gestion des logs pour les utilisateurs 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 -> users.forEachIndexed { index, user ->
val hashPassWd = hashPassword(passwd) val hashPassWd = hashPassword(passwd)
if (user.username == username && user.password == hashPassWd) { if (user.username == username && user.password == hashPassWd) {
userSession.value.id = index
navController(index) navController(index)
logsUser.logInformationUserConnect(user, "UserConnect") logsUser.logInformationUserConnect(user, "UserConnect")
return true return true

@ -6,13 +6,19 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.compose.NavHost import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
import androidx.navigation.toRoute import androidx.navigation.toRoute
import com.example.what_the_fantasy.data.services.ServicesStub import com.example.what_the_fantasy.data.services.ServicesStub
import com.example.what_the_fantasy.ui.screens.* 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 import kotlinx.serialization.Serializable
@Serializable @Serializable
@ -63,11 +69,24 @@ fun AppNavigator() {
val navController = rememberNavController() val navController = rememberNavController()
val services = ServicesStub() 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( Scaffold(
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
containerColor = MaterialTheme.colorScheme.onPrimary containerColor = MaterialTheme.colorScheme.onPrimary
) { paddingValues -> ) { paddingValues ->
Box(modifier = Modifier.padding(paddingValues)) { Box(modifier = Modifier.padding(paddingValues)) {
NavHost(navController, startDestination = Login) { NavHost(navController, startDestination = Login) {
composable<Login> { composable<Login> {
LoginPage( LoginPage(
@ -77,8 +96,11 @@ fun AppNavigator() {
popUpTo(Login) { inclusive = true } popUpTo(Login) { inclusive = true }
} }
}, },
authUserVM = authUserVM,
authState = authState
) )
} }
composable<Accueil> { composable<Accueil> {
val accueil: Accueil = it.toRoute() val accueil: Accueil = it.toRoute()
AccueilPage( AccueilPage(
@ -150,6 +172,8 @@ fun AppNavigator() {
popUpTo(Login) { inclusive = true } popUpTo(Login) { inclusive = true }
} }
}, },
signInUserVM = signInUserVM,
signInState = signInState
) )
} }
composable<SubmitQuote> { 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.TitlePageComponent
import com.example.what_the_fantasy.ui.components.VisibleIconPasswordComponent 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.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.colorBackground
import com.example.what_the_fantasy.ui.theme.gradienBox import com.example.what_the_fantasy.ui.theme.gradienBox
import com.example.what_the_fantasy.ui.viewModels.AuthUserViewModel import com.example.what_the_fantasy.ui.viewModels.AuthUserViewModel
@Composable @Composable
fun LoginPage(navControllerSignUp: () -> Unit, navControllerProfil: (Int) -> Unit) { fun LoginPage(navControllerSignUp: () -> Unit, navControllerProfil: (Int) -> Unit, authUserVM : AuthUserViewModel, authState : AuthUserState) {
val authUserVM : AuthUserViewModel = viewModel() // val authUserVM : AuthUserViewModel = viewModel()
val authState by authUserVM.userState.collectAsState() // val authState by authUserVM.userState.collectAsState()
Box( Box(
modifier = Modifier modifier = Modifier

@ -1,6 +1,5 @@
package com.example.what_the_fantasy.ui.screens package com.example.what_the_fantasy.ui.screens
import android.util.Log
import android.util.Patterns import android.util.Patterns
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.clickable 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.theme.gradienBox
import com.example.what_the_fantasy.ui.components.ErrorMessageProfileComponent 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.components.VisibleIconPasswordComponent
import com.example.what_the_fantasy.ui.states.SignInUserState
import com.example.what_the_fantasy.ui.viewModels.SignInUserViewModel import com.example.what_the_fantasy.ui.viewModels.SignInUserViewModel
@Composable @Composable
fun SignUpPage(navControllerLogin: () -> Unit) { fun SignUpPage(navControllerLogin: () -> Unit, signInUserVM :SignInUserViewModel,signInState : SignInUserState) {
val signInUserVM : SignInUserViewModel = viewModel() // val signInUserVM : SignInUserViewModel = viewModel()
val signInState by signInUserVM.userState.collectAsState() // val signInState by signInUserVM.userState.collectAsState()
Box( Box(
modifier = Modifier modifier = Modifier

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

@ -14,6 +14,9 @@ class AuthUserViewModel : ViewModel(){
val userState : StateFlow<AuthUserState> = _userState.asStateFlow() val userState : StateFlow<AuthUserState> = _userState.asStateFlow()
fun setId(id : Int){
_userState.update { it.copy(id=id) }
}
fun setUsername(username : String){ fun setUsername(username : String){
_userState.update { it.copy(username=username) } _userState.update { it.copy(username=username) }
} }
@ -23,6 +26,6 @@ class AuthUserViewModel : ViewModel(){
} }
fun validLogin(username : String, passwd : String, navController: (Int) -> Unit) : Boolean{ 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