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.navigation.StudeezDestinations
import be.ugent.sel.studeez.screens.home.HomeRoute 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.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.EditProfileRoute
import be.ugent.sel.studeez.screens.profile.EditProfileScreen
import be.ugent.sel.studeez.screens.profile.ProfileRoute 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.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.splash.SplashScreen
import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewScreen import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewScreen
import be.ugent.sel.studeez.screens.timer_selection.TimerSelectionScreen import be.ugent.sel.studeez.screens.timer_selection.TimerSelectionScreen
@ -112,7 +109,7 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) {
} }
composable(StudeezDestinations.SIGN_UP_SCREEN) { composable(StudeezDestinations.SIGN_UP_SCREEN) {
SignUpScreen(openAndPopUp) SignUpRoute(openAndPopUp, viewModel = hiltViewModel())
} }
composable(StudeezDestinations.HOME_SCREEN) { composable(StudeezDestinations.HOME_SCREEN) {

View file

@ -10,23 +10,64 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier 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.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.basicButton
import be.ugent.sel.studeez.common.ext.fieldModifier import be.ugent.sel.studeez.common.ext.fieldModifier
import be.ugent.sel.studeez.common.ext.textButton import be.ugent.sel.studeez.common.ext.textButton
import be.ugent.sel.studeez.resources import be.ugent.sel.studeez.resources
import be.ugent.sel.studeez.R.string as AppText 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 @Composable
fun SignUpScreen( fun SignUpRoute(
openAndPopUp: (String, String) -> Unit, openAndPopUp: (String, String) -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
viewModel: SignUpViewModel = hiltViewModel() viewModel: SignUpViewModel,
) { ) {
val uiState by viewModel.uiState 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)) { SimpleScreenTemplate(title = resources().getString(AppText.create_account)) {
Column( Column(
modifier = modifier modifier = modifier
@ -36,40 +77,45 @@ fun SignUpScreen(
verticalArrangement = Arrangement.Center, verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
) { ) {
UsernameField( UsernameField(
uiState.username, uiState.username,
viewModel::onUsernameChange, signUpActions.onUserNameChange,
fieldModifier fieldModifier
) )
EmailField( EmailField(
uiState.email, uiState.email,
viewModel::onEmailChange, signUpActions.onEmailChange,
fieldModifier fieldModifier
) )
PasswordField( PasswordField(
uiState.password, uiState.password,
viewModel::onPasswordChange, signUpActions.onPasswordChange,
fieldModifier fieldModifier
) )
RepeatPasswordField( RepeatPasswordField(
uiState.repeatPassword, uiState.repeatPassword,
viewModel::onRepeatPasswordChange, signUpActions.onRepeatPasswordChange,
fieldModifier fieldModifier
) )
BasicButton(
BasicButton(AppText.create_account, Modifier.basicButton()) { AppText.create_account,
viewModel.onSignUpClick(openAndPopUp) Modifier.basicButton(),
} onClick = signUpActions.onSignUpClick
)
BasicTextButton(AppText.already_user, Modifier.textButton()) { BasicTextButton(
viewModel.onLoginScreenClick(openAndPopUp) 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) openAndPopUp(LOGIN_SCREEN, SIGN_UP_SCREEN)
} }
} }