From 95140e17393e78f2ef363d8170da9dca7b56bac0 Mon Sep 17 00:00:00 2001 From: brreynie Date: Sat, 22 Apr 2023 23:39:54 +0200 Subject: [PATCH] wrap signupscreen in route --- .../java/be/ugent/sel/studeez/StudeezApp.kt | 7 +- .../studeez/screens/sign_up/SignUpScreen.kt | 90 ++++++++++++++----- .../screens/sign_up/SignUpViewModel.kt | 2 +- 3 files changed, 71 insertions(+), 28 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 0676260..196b468 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -27,13 +27,10 @@ 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.EditProfileRoute -import be.ugent.sel.studeez.screens.profile.EditProfileScreen import be.ugent.sel.studeez.screens.profile.ProfileRoute -import be.ugent.sel.studeez.screens.profile.ProfileScreen import be.ugent.sel.studeez.screens.session.SessionScreen -import be.ugent.sel.studeez.screens.sign_up.SignUpScreen +import be.ugent.sel.studeez.screens.sign_up.SignUpRoute import be.ugent.sel.studeez.screens.splash.SplashScreen import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewScreen import be.ugent.sel.studeez.screens.timer_selection.TimerSelectionScreen @@ -112,7 +109,7 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { } composable(StudeezDestinations.SIGN_UP_SCREEN) { - SignUpScreen(openAndPopUp) + SignUpRoute(openAndPopUp, viewModel = hiltViewModel()) } composable(StudeezDestinations.HOME_SCREEN) { diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpScreen.kt index 7515117..038bee2 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpScreen.kt @@ -10,23 +10,64 @@ 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 be.ugent.sel.studeez.common.composable.* +import androidx.compose.ui.tooling.preview.Preview +import be.ugent.sel.studeez.common.composable.BasicButton +import be.ugent.sel.studeez.common.composable.BasicTextButton +import be.ugent.sel.studeez.common.composable.EmailField +import be.ugent.sel.studeez.common.composable.PasswordField +import be.ugent.sel.studeez.common.composable.RepeatPasswordField +import be.ugent.sel.studeez.common.composable.SimpleScreenTemplate +import be.ugent.sel.studeez.common.composable.UsernameField import be.ugent.sel.studeez.common.ext.basicButton import be.ugent.sel.studeez.common.ext.fieldModifier 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 SignUpActions( + val onUserNameChange: (String) -> Unit, + val onEmailChange: (String) -> Unit, + val onPasswordChange: (String) -> Unit, + val onRepeatPasswordChange: (String) -> Unit, + val onSignUpClick: () -> Unit, + val onLoginClick: () -> Unit, +) + +fun getSignUpActions( + viewModel: SignUpViewModel, + openAndPopUp: (String, String) -> Unit, +): SignUpActions { + return SignUpActions( + onUserNameChange = { viewModel.onUsernameChange(it) }, + onEmailChange = { viewModel.onEmailChange(it) }, + onPasswordChange = { viewModel.onPasswordChange(it) }, + onRepeatPasswordChange = { viewModel.onRepeatPasswordChange(it) }, + onSignUpClick = { viewModel.onSignUpClick(openAndPopUp) }, + onLoginClick = { viewModel.onLoginClick(openAndPopUp) }, + ) +} + @Composable -fun SignUpScreen( +fun SignUpRoute( openAndPopUp: (String, String) -> Unit, modifier: Modifier = Modifier, - viewModel: SignUpViewModel = hiltViewModel() + viewModel: SignUpViewModel, ) { val uiState by viewModel.uiState - val fieldModifier = Modifier.fieldModifier() + SignUpScreen( + modifier = modifier, + uiState, + getSignUpActions(viewModel, openAndPopUp) + ) +} +@Composable +fun SignUpScreen( + modifier: Modifier = Modifier, + uiState: SignUpUiState, + signUpActions: SignUpActions, +) { + val fieldModifier = Modifier.fieldModifier() SimpleScreenTemplate(title = resources().getString(AppText.create_account)) { Column( modifier = modifier @@ -36,40 +77,45 @@ fun SignUpScreen( verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { - UsernameField( uiState.username, - viewModel::onUsernameChange, + signUpActions.onUserNameChange, fieldModifier ) - EmailField( uiState.email, - viewModel::onEmailChange, + signUpActions.onEmailChange, fieldModifier ) - PasswordField( uiState.password, - viewModel::onPasswordChange, + signUpActions.onPasswordChange, fieldModifier ) - RepeatPasswordField( uiState.repeatPassword, - viewModel::onRepeatPasswordChange, + signUpActions.onRepeatPasswordChange, fieldModifier ) - - BasicButton(AppText.create_account, Modifier.basicButton()) { - viewModel.onSignUpClick(openAndPopUp) - } - - BasicTextButton(AppText.already_user, Modifier.textButton()) { - viewModel.onLoginScreenClick(openAndPopUp) - } + BasicButton( + AppText.create_account, + Modifier.basicButton(), + onClick = signUpActions.onSignUpClick + ) + BasicTextButton( + AppText.already_user, + Modifier.textButton(), + action = signUpActions.onLoginClick + ) } } +} - +@Preview +@Composable +fun SignUpPreview() { + SignUpScreen( + uiState = SignUpUiState(), + signUpActions = SignUpActions({}, {}, {}, {}, {}, {}) + ) } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpViewModel.kt index 91dde13..a08d063 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/sign_up/SignUpViewModel.kt @@ -71,7 +71,7 @@ class SignUpViewModel @Inject constructor( } } - fun onLoginScreenClick(openAndPopUp: (String, String) -> Unit) { + fun onLoginClick(openAndPopUp: (String, String) -> Unit) { openAndPopUp(LOGIN_SCREEN, SIGN_UP_SCREEN) } } \ No newline at end of file