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.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) { | ||||
|  |  | |||
|  | @ -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({}, {}, {}, {}, {}, {}) | ||||
|     ) | ||||
| } | ||||
|  | @ -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) | ||||
|     } | ||||
| } | ||||
		Reference in a new issue
	
	 brreynie
						brreynie