From de42f090ef40955f83b13f6e8e1ba0d32397f2a4 Mon Sep 17 00:00:00 2001 From: brreynie Date: Sat, 22 Apr 2023 22:48:27 +0200 Subject: [PATCH] wrap loginscreen in route --- .../java/be/ugent/sel/studeez/StudeezApp.kt | 3 +- .../sel/studeez/screens/log_in/LoginScreen.kt | 84 ++++++++++++++++--- .../studeez/screens/log_in/LoginViewModel.kt | 2 +- 3 files changed, 74 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt index ce3e322..d0e7db7 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -26,6 +26,7 @@ import androidx.navigation.compose.rememberNavController import be.ugent.sel.studeez.common.snackbar.SnackbarManager import be.ugent.sel.studeez.navigation.StudeezDestinations import be.ugent.sel.studeez.screens.home.HomeRoute +import be.ugent.sel.studeez.screens.log_in.LoginRoute import be.ugent.sel.studeez.screens.log_in.LoginScreen import be.ugent.sel.studeez.screens.profile.EditProfileScreen import be.ugent.sel.studeez.screens.profile.ProfileScreen @@ -105,7 +106,7 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { } composable(StudeezDestinations.LOGIN_SCREEN) { - LoginScreen(openAndPopUp) + LoginRoute(openAndPopUp, viewModel = hiltViewModel()) } composable(StudeezDestinations.SIGN_UP_SCREEN) { diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginScreen.kt index 2762abc..fe7524b 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginScreen.kt @@ -10,7 +10,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.compose.ui.tooling.preview.Preview import be.ugent.sel.studeez.common.composable.* import be.ugent.sel.studeez.common.ext.basicButton import be.ugent.sel.studeez.common.ext.fieldModifier @@ -18,14 +18,48 @@ import be.ugent.sel.studeez.common.ext.textButton import be.ugent.sel.studeez.resources import be.ugent.sel.studeez.R.string as AppText +data class LoginScreenActions( + val onEmailChange: (String) -> Unit, + val onPasswordChange: (String) -> Unit, + val onSignUpClick: () -> Unit, + val onSignInClick: () -> Unit, + val onForgotPasswordClick: () -> Unit, +) + +fun getLoginScreenActions( + viewModel: LoginViewModel, + openAndPopUp: (String, String) -> Unit, +): LoginScreenActions { + return LoginScreenActions( + onEmailChange = { viewModel.onEmailChange(it) }, + onPasswordChange = { viewModel.onPasswordChange(it) }, + onSignUpClick = { viewModel.onSignUpClick(openAndPopUp) }, + onSignInClick = { viewModel.onSignInClick(openAndPopUp) }, + onForgotPasswordClick = { viewModel.onForgotPasswordClick() } + ) +} + @Composable -fun LoginScreen( +fun LoginRoute( openAndPopUp: (String, String) -> Unit, modifier: Modifier = Modifier, - viewModel: LoginViewModel = hiltViewModel() + viewModel: LoginViewModel, ) { val uiState by viewModel.uiState + LoginScreen( + modifier = modifier, + uiState = uiState, + loginScreenActions = getLoginScreenActions(viewModel = viewModel, openAndPopUp) + ) +} + +@Composable +fun LoginScreen( + modifier: Modifier = Modifier, + uiState: LoginUiState, + loginScreenActions: LoginScreenActions, +) { SimpleScreenTemplate(title = resources().getString(AppText.sign_in)) { Column( modifier = modifier @@ -35,18 +69,42 @@ fun LoginScreen( verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { - EmailField(uiState.email, viewModel::onEmailChange, Modifier.fieldModifier()) - PasswordField(uiState.password, viewModel::onPasswordChange, Modifier.fieldModifier()) + EmailField( + uiState.email, + loginScreenActions.onEmailChange, + Modifier.fieldModifier() + ) + PasswordField( + uiState.password, + loginScreenActions.onPasswordChange, + Modifier.fieldModifier() + ) + BasicButton( + AppText.sign_in, + Modifier.basicButton(), + onClick = loginScreenActions.onSignInClick, + ) - BasicButton(AppText.sign_in, Modifier.basicButton()) { viewModel.onSignInClick(openAndPopUp) } + BasicTextButton( + AppText.not_already_user, + Modifier.textButton(), + action = loginScreenActions.onSignUpClick, + ) - BasicTextButton(AppText.not_already_user, Modifier.textButton()) { - viewModel.onNotAlreadyUser(openAndPopUp) - } - - BasicTextButton(AppText.forgot_password, Modifier.textButton()) { - viewModel.onForgotPasswordClick() - } + BasicTextButton( + AppText.forgot_password, + Modifier.textButton(), + action = loginScreenActions.onForgotPasswordClick, + ) } } +} + +@Preview +@Composable +fun LoginScreenPreview() { + LoginScreen( + uiState = LoginUiState(), + loginScreenActions = LoginScreenActions({}, {}, {}, {}, {}) + ) } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginViewModel.kt index cf3a72d..c7e88fa 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/log_in/LoginViewModel.kt @@ -63,7 +63,7 @@ class LoginViewModel @Inject constructor( } } - fun onNotAlreadyUser(openAndPopUp: (String, String) -> Unit) { + fun onSignUpClick(openAndPopUp: (String, String) -> Unit) { openAndPopUp(SIGN_UP_SCREEN, LOGIN_SCREEN) } } \ No newline at end of file