From 210d8c575f04c05e1fc91db40c2403ad18448cd3 Mon Sep 17 00:00:00 2001 From: "leni.beaulaton" Date: Sat, 29 Mar 2025 19:01:51 +0100 Subject: [PATCH] ViewModel AppNavigation pour SignUp et Login --- .../data/services/IServices.kt | 4 +++- .../data/services/ServicesStub.kt | 5 +++- .../ui/navigations/AppNavigator.kt | 24 +++++++++++++++++++ .../what_the_fantasy/ui/screens/LoginPage.kt | 7 +++--- .../what_the_fantasy/ui/screens/ProfilPage.kt | 1 - .../what_the_fantasy/ui/screens/SignUpPage.kt | 7 +++--- .../ui/states/AuthUserState.kt | 1 + .../ui/viewModels/AuthUserViewModel.kt | 5 +++- 8 files changed, 44 insertions(+), 10 deletions(-) diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/IServices.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/IServices.kt index 3ca9bd8..ae6156e 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/IServices.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/IServices.kt @@ -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, navController: (Int) -> Unit): Boolean fun EditUsername(username : String, index : Int) : Boolean fun EditEmail(email : String, index : Int) : Boolean fun EditPasswd(passwd : String, index : Int) diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/ServicesStub.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/ServicesStub.kt index f427cdb..7b4a5bf 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/ServicesStub.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/data/services/ServicesStub.kt @@ -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, 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 diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/navigations/AppNavigator.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/navigations/AppNavigator.kt index 36ab27b..ecb496f 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/navigations/AppNavigator.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/navigations/AppNavigator.kt @@ -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 { LoginPage( @@ -77,8 +96,11 @@ fun AppNavigator() { popUpTo(Login) { inclusive = true } } }, + authUserVM = authUserVM, + authState = authState ) } + composable { val accueil: Accueil = it.toRoute() AccueilPage( @@ -150,6 +172,8 @@ fun AppNavigator() { popUpTo(Login) { inclusive = true } } }, + signInUserVM = signInUserVM, + signInState = signInState ) } composable { diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/LoginPage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/LoginPage.kt index ac18a16..05e8a47 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/LoginPage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/LoginPage.kt @@ -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 diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/ProfilPage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/ProfilPage.kt index dec28da..13dc9be 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/ProfilPage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/ProfilPage.kt @@ -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 diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/SignUpPage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/SignUpPage.kt index b1b38a1..5acf8b8 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/SignUpPage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/SignUpPage.kt @@ -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 diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/states/AuthUserState.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/states/AuthUserState.kt index 10e361d..f3263f1 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/states/AuthUserState.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/states/AuthUserState.kt @@ -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 = "", ) \ No newline at end of file diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/viewModels/AuthUserViewModel.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/viewModels/AuthUserViewModel.kt index 9fc6bfb..0f49325 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/viewModels/AuthUserViewModel.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/viewModels/AuthUserViewModel.kt @@ -14,6 +14,9 @@ class AuthUserViewModel : ViewModel(){ val userState : StateFlow = _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) } } \ No newline at end of file