@ -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,61 +96,81 @@ fun AppNavigator() {
popUpTo ( Login ) { inclusive = true }
popUpTo ( Login ) { inclusive = true }
}
}
} ,
} ,
services = services
authUserVM = authUserVM ,
authState = authState ,
initialierCurrentUser = { currentUserVM . initialiseCurrentUser ( it ) }
)
)
}
}
composable < Accueil > {
composable < Accueil > {
val accueil : Accueil = it . toRoute ( )
//val accueil: Accueil = it.toRoute( )
AccueilPage (
AccueilPage (
index = accueil . userIndex ,
navFavorite = { navController . navigate ( Favorite ( currentUserState . id ) ) } ,
navFavorite = { navController . navigate ( Favorite ( accueil . userIndex ) ) } ,
navQuiz = { navController . navigate ( QuizMenu ( currentUserState . id ) ) } ,
navQuiz = { navController . navigate ( QuizMenu ( accueil . userIndex ) ) } ,
navProfil = { navController . navigate ( Profil ( currentUserState . id ) ) } ,
navProfil = { navController . navigate ( Profil ( accueil . userIndex ) ) } ,
navQuote = { quoteId ->
navQuote = { quoteId -> navController . navigate ( OneQuote ( quoteId , accueil . userIndex ) ) } ,
navController . navigate (
navSearch = { navController . navigate ( Search ( accueil . userIndex ) ) } ,
OneQuote (
services = services
quoteId ,
currentUserState . id
)
)
} ,
navSearch = { navController . navigate ( Search ( currentUserState . id ) ) } ,
services = services ,
currentUserVM = currentUserVM ,
currentUserState = currentUserState ,
)
)
}
}
composable < Favorite > {
composable < Favorite > {
val favorite : Favorite = it . toRoute ( )
//val favorite: Favorite = it.toRoute( )
FavoritePage (
FavoritePage (
index = favorite . userIndex ,
navAccueil = { navController . navigate ( Accueil ( currentUserState . id ) ) } ,
navAccueil = { navController . navigate ( Accueil ( favorite . userIndex ) ) } ,
navQuiz = { navController . navigate ( QuizMenu ( currentUserState . id ) ) } ,
navQuiz = { navController . navigate ( QuizMenu ( favorite . userIndex ) ) } ,
navProfil = { navController . navigate ( Profil ( currentUserState . id ) ) } ,
navProfil = { navController . navigate ( Profil ( favorite . userIndex ) ) } ,
navQuote = { quoteId ->
navQuote = { quoteId -> navController . navigate ( OneQuote ( quoteId , favorite . userIndex ) ) } ,
navController . navigate (
navSearch = { navController . navigate ( Search ( favorite . userIndex ) ) } ,
OneQuote (
services = services
quoteId ,
currentUserState . id
)
)
} ,
navSearch = { navController . navigate ( Search ( currentUserState . id ) ) } ,
services = services ,
currentUserVM = currentUserVM ,
currentUserState = currentUserState ,
)
)
}
}
composable < Profil > {
composable < Profil > {
val profil : Profil = it . toRoute ( )
val profil : Profil = it . toRoute ( )
ProfilPage (
ProfilPage (
index = profil . userIndex ,
navFavorite = { navController . navigate ( Favorite ( currentUserState . id ) ) } ,
navFavorite = { navController . navigate ( Favorite ( profil . userIndex ) ) } ,
navAccueil = { navController . navigate ( Accueil ( currentUserState . id ) ) } ,
navAccueil = { navController . navigate ( Accueil ( profil . userIndex ) ) } ,
navQuiz = { navController . navigate ( QuizMenu ( currentUserState . id ) ) } ,
navQuiz = { navController . navigate ( QuizMenu ( profil . userIndex ) ) } ,
navSubmitQuote = { navController . navigate ( SubmitQuote ( currentUserState . id ) ) } ,
navSubmitQuote = { navController . navigate ( SubmitQuote ( profil . userIndex ) ) } ,
navUnLog = {
navUnLog = {
navController . navigate ( Login ) {
navController . navigate ( Login ) {
popUpTo ( profil ) { inclusive = true }
popUpTo ( profil ) { inclusive = true }
}
}
} ,
} ,
currentUserVM = currentUserVM ,
currentUserState = currentUserState ,
navSearch = { navController . navigate ( Search ( profil . userIndex ) ) } ,
navSearch = { navController . navigate ( Search ( profil . userIndex ) ) } ,
services = services
)
)
}
}
composable < OneQuote > {
composable < OneQuote > {
val quote : OneQuote = it . toRoute ( )
val quote : OneQuote = it . toRoute ( )
QuotePage (
QuotePage (
quoteId = quote . quoteId ,
quoteId = quote . quoteId ,
navAccueil = { navController . navigate ( Accueil ( currentUserState . id ) ) } ,
navQuiz = { navController . navigate ( QuizMenu ( currentUserState . id ) ) } ,
navProfil = { navController . navigate ( Profil ( currentUserState . id ) ) } ,
navFavorite = { navController . navigate ( Favorite ( currentUserState . id ) ) } ,
service = services ,
service = services ,
index = quote . userIndex ,
currentUserVM = currentUserVM ,
navAccueil = { navController . navigate ( Accueil ( quote . userIndex ) ) } ,
currentUserState = currentUserState ,
navQuiz = { navController . navigate ( QuizMenu ( quote . userIndex ) ) } ,
navSearch = { navController . navigate ( Search ( currentUserState . id ) ) }
navProfil = { navController . navigate ( Profil ( quote . userIndex ) ) } ,
navFavorite = { navController . navigate ( Favorite ( quote . userIndex ) ) } ,
navSearch = { navController . navigate ( Search ( quote . userIndex ) ) }
)
)
}
}
composable < Search > {
composable < Search > {
@ -145,7 +184,9 @@ fun AppNavigator() {
navSearch = { type , newSearch -> navController . navigate ( Search ( search . userIndex , type , newSearch ) ) } ,
navSearch = { type , newSearch -> navController . navigate ( Search ( search . userIndex , type , newSearch ) ) } ,
services = services ,
services = services ,
type = search . type ,
type = search . type ,
search = search . search
search = search . search ,
currentUserVM = currentUserVM ,
currentUserState = currentUserState ,
)
)
}
}
composable < SignUp > {
composable < SignUp > {
@ -155,68 +196,77 @@ fun AppNavigator() {
popUpTo ( Login ) { inclusive = true }
popUpTo ( Login ) { inclusive = true }
}
}
} ,
} ,
services = services
signInUserVM = signInUserVM ,
signInState = signInState
)
)
}
}
composable < SubmitQuote > {
composable < SubmitQuote > {
val submitQuote : SubmitQuote = it . toRoute ( )
//val submitQuote: SubmitQuote = it.toRoute( )
SubmitQuotePage (
SubmitQuotePage (
navAccueil = { navController . navigate ( Accueil ( submitQuote. userIndex ) ) } ,
navAccueil = { navController . navigate ( Accueil ( currentUserState. id ) ) } ,
navFavorite = { navController . navigate ( Favorite ( submitQuote. userIndex ) ) } ,
navFavorite = { navController . navigate ( Favorite ( currentUserState. id ) ) } ,
navProfil = { navController . navigate ( Profil ( submitQuote. userIndex ) ) } ,
navProfil = { navController . navigate ( Profil ( currentUserState. id ) ) } ,
navQuiz = { navController . navigate ( QuizMenu ( submitQuote. userIndex ) ) } ,
navQuiz = { navController . navigate ( QuizMenu ( currentUserState. id ) ) } ,
navRecap = { quoteContent , character , source ->
navRecap = { quoteContent , character , source ->
navController . navigate (
navController . navigate (
RecapSubmit (
RecapSubmit (
submitQuote. userIndex ,
currentUserState. id ,
quoteContent ,
quoteContent ,
character ,
character ,
source
source
)
)
)
)
}
} ,
currentUserVM = currentUserVM ,
currentUserState = currentUserState ,
)
)
}
}
composable < RecapSubmit > {
composable < RecapSubmit > {
val recapSubmit : RecapSubmit = it . toRoute ( )
val recapSubmit : RecapSubmit = it . toRoute ( )
RecapSubmitPage (
RecapSubmitPage (
index = recapSubmit . userIndex ,
quoteContent = recapSubmit . quoteContent ,
quoteContent = recapSubmit . quoteContent ,
character = recapSubmit . character ,
character = recapSubmit . character ,
source = recapSubmit . source ,
source = recapSubmit . source ,
navAccueil = { navController . navigate ( Accueil ( recapSubmit . userIndex ) ) } ,
navAccueil = { navController . navigate ( Accueil ( currentUserState . id ) ) } ,
navFavorite = { navController . navigate ( Favorite ( recapSubmit . userIndex ) ) } ,
navFavorite = { navController . navigate ( Favorite ( currentUserState . id ) ) } ,
navProfil = { navController . navigate ( Profil ( recapSubmit . userIndex ) ) } ,
navProfil = { navController . navigate ( Profil ( currentUserState . id ) ) } ,
navSearch = { navController . navigate ( Search ( recapSubmit . userIndex ) ) } ,
navSearch = { navController . navigate ( Search ( currentUserState . id ) ) } ,
navQuiz = { navController . navigate ( QuizMenu ( recapSubmit . userIndex ) ) }
navQuiz = { navController . navigate ( QuizMenu ( currentUserState . id ) ) } ,
)
currentUserVM = currentUserVM ,
currentUserState = currentUserState ,
)
}
}
composable < QuizMenu > {
composable < QuizMenu > {
val quizMenu : QuizMenu = it . toRoute ( )
//val quizMenu: QuizMenu = it.toRoute( )
QuizMenu (
QuizMenu (
navAccueil = { navController . navigate ( Accueil ( quizMenu . userIndex ) ) } ,
currentUserVM = currentUserVM ,
navFavorite = { navController . navigate ( Favorite ( quizMenu . userIndex ) ) } ,
currentUserState = currentUserState ,
navProfil = { navController . navigate ( Profil ( quizMenu . userIndex ) ) } ,
navAccueil = { navController . navigate ( Accueil ( currentUserState . id ) ) } ,
navSearch = { navController . navigate ( Search ( quizMenu . userIndex ) ) } ,
navFavorite = { navController . navigate ( Favorite ( currentUserState . id ) ) } ,
navProfil = { navController . navigate ( Profil ( currentUserState . id ) ) } ,
navSearch = { navController . navigate ( Search ( currentUserState . id ) ) } ,
navControllerQuiz = { idQuiz ->
navControllerQuiz = { idQuiz ->
navController . navigate ( Quiz ( quizMenu . userIndex , idQuiz ) )
navController . navigate ( Quiz ( currentUserState. id , idQuiz ) )
} ,
} ,
navControllerRandomQuiz = { navController . navigate ( QuizRandom ( quizMenu . userIndex ) ) }
navControllerRandomQuiz = { navController . navigate ( QuizRandom ( currentUserState . id ) ) }
)
)
}
}
composable < Quiz > {
composable < Quiz > {
val quiz : Quiz = it . toRoute ( )
val quiz : Quiz = it . toRoute ( )
QuizPage (
QuizPage (
navAccueil = { navController . navigate ( Accueil ( quiz. userIndex ) ) } ,
navAccueil = { navController . navigate ( Accueil ( currentUserState. id ) ) } ,
navFavorite = { navController . navigate ( Favorite ( quiz. userIndex ) ) } ,
navFavorite = { navController . navigate ( Favorite ( currentUserState. id ) ) } ,
navProfil = { navController . navigate ( Profil ( quiz. userIndex ) ) } ,
navProfil = { navController . navigate ( Profil ( currentUserState. id ) ) } ,
navQuiz = { navController . navigate ( QuizMenu ( quiz. userIndex ) ) } ,
navQuiz = { navController . navigate ( QuizMenu ( currentUserState. id ) ) } ,
navControllerQuizEnd = { idQuiz , pts ->
navControllerQuizEnd = { idQuiz , pts ->
navController . navigate ( QuizEnd ( quiz. userIndex , idQuiz , pts ) )
navController . navigate ( QuizEnd ( currentUserState. id , idQuiz , pts ) )
} ,
} ,
navSearch = { navController . navigate ( Search ( quiz . userIndex ) ) } ,
navSearch = { navController . navigate ( Search ( currentUserState . id ) ) } ,
idQuiz = quiz . idQuiz
idQuiz = quiz . idQuiz ,
currentUserVM = currentUserVM ,
currentUserState = currentUserState ,
)
)
}
}
composable < QuizEnd > {
composable < QuizEnd > {
@ -224,11 +274,13 @@ fun AppNavigator() {
QuizEndPage (
QuizEndPage (
idQuiz = quizEnd . idQuiz ,
idQuiz = quizEnd . idQuiz ,
points = quizEnd . pts ,
points = quizEnd . pts ,
navAccueil = { navController . navigate ( Accueil ( quizEnd . userIndex ) ) } ,
navAccueil = { navController . navigate ( Accueil ( currentUserState . id ) ) } ,
navFavorite = { navController . navigate ( Favorite ( quizEnd . userIndex ) ) } ,
navFavorite = { navController . navigate ( Favorite ( currentUserState . id ) ) } ,
navProfil = { navController . navigate ( Profil ( quizEnd . userIndex ) ) } ,
navProfil = { navController . navigate ( Profil ( currentUserState . id ) ) } ,
navQuiz = { navController . navigate ( QuizMenu ( quizEnd . userIndex ) ) } ,
navQuiz = { navController . navigate ( QuizMenu ( currentUserState . id ) ) } ,
navSearch = { navController . navigate ( Search ( quizEnd . userIndex ) ) }
navSearch = { navController . navigate ( Search ( currentUserState . id ) ) } ,
currentUserVM = currentUserVM ,
currentUserState = currentUserState ,
)
)
}
}
@ -243,6 +295,8 @@ fun AppNavigator() {
navControllerQuizEnd = { idQuiz , pts ->
navControllerQuizEnd = { idQuiz , pts ->
navController . navigate ( QuizEnd ( quizRandom . userIndex , idQuiz , pts ) )
navController . navigate ( QuizEnd ( quizRandom . userIndex , idQuiz , pts ) )
} ,
} ,
currentUserVM = currentUserVM ,
currentUserState = currentUserState ,
)
)
}
}
}
}