wrap signupscreen in route
This commit is contained in:
parent
3fd191cccc
commit
95140e1739
3 changed files with 71 additions and 28 deletions
|
@ -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) {
|
||||||
|
|
|
@ -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({}, {}, {}, {}, {}, {})
|
||||||
|
)
|
||||||
}
|
}
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in a new issue