wrap signupscreen in route

This commit is contained in:
brreynie 2023-04-22 23:39:54 +02:00
parent 3fd191cccc
commit 95140e1739
3 changed files with 71 additions and 28 deletions

View file

@ -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) {

View file

@ -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({}, {}, {}, {}, {}, {})
)
}

View file

@ -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)
}
}