wrap loginscreen in route
This commit is contained in:
		
							parent
							
								
									8fc4ac8cf1
								
							
						
					
					
						commit
						de42f090ef
					
				
					 3 changed files with 74 additions and 15 deletions
				
			
		|  | @ -26,6 +26,7 @@ import androidx.navigation.compose.rememberNavController | |||
| 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.EditProfileScreen | ||||
| import be.ugent.sel.studeez.screens.profile.ProfileScreen | ||||
|  | @ -105,7 +106,7 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { | |||
|     } | ||||
| 
 | ||||
|     composable(StudeezDestinations.LOGIN_SCREEN) { | ||||
|         LoginScreen(openAndPopUp) | ||||
|         LoginRoute(openAndPopUp, viewModel = hiltViewModel()) | ||||
|     } | ||||
| 
 | ||||
|     composable(StudeezDestinations.SIGN_UP_SCREEN) { | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ 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 androidx.compose.ui.tooling.preview.Preview | ||||
| import be.ugent.sel.studeez.common.composable.* | ||||
| import be.ugent.sel.studeez.common.ext.basicButton | ||||
| import be.ugent.sel.studeez.common.ext.fieldModifier | ||||
|  | @ -18,14 +18,48 @@ 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 LoginScreenActions( | ||||
|     val onEmailChange: (String) -> Unit, | ||||
|     val onPasswordChange: (String) -> Unit, | ||||
|     val onSignUpClick: () -> Unit, | ||||
|     val onSignInClick: () -> Unit, | ||||
|     val onForgotPasswordClick: () -> Unit, | ||||
| ) | ||||
| 
 | ||||
| fun getLoginScreenActions( | ||||
|     viewModel: LoginViewModel, | ||||
|     openAndPopUp: (String, String) -> Unit, | ||||
| ): LoginScreenActions { | ||||
|     return LoginScreenActions( | ||||
|         onEmailChange = { viewModel.onEmailChange(it) }, | ||||
|         onPasswordChange = { viewModel.onPasswordChange(it) }, | ||||
|         onSignUpClick = { viewModel.onSignUpClick(openAndPopUp) }, | ||||
|         onSignInClick = { viewModel.onSignInClick(openAndPopUp) }, | ||||
|         onForgotPasswordClick = { viewModel.onForgotPasswordClick() } | ||||
|     ) | ||||
| } | ||||
| 
 | ||||
| @Composable | ||||
| fun LoginScreen( | ||||
| fun LoginRoute( | ||||
|     openAndPopUp: (String, String) -> Unit, | ||||
|     modifier: Modifier = Modifier, | ||||
|     viewModel: LoginViewModel = hiltViewModel() | ||||
|     viewModel: LoginViewModel, | ||||
| ) { | ||||
|     val uiState by viewModel.uiState | ||||
| 
 | ||||
|     LoginScreen( | ||||
|         modifier = modifier, | ||||
|         uiState = uiState, | ||||
|         loginScreenActions = getLoginScreenActions(viewModel = viewModel, openAndPopUp) | ||||
|     ) | ||||
| } | ||||
| 
 | ||||
| @Composable | ||||
| fun LoginScreen( | ||||
|     modifier: Modifier = Modifier, | ||||
|     uiState: LoginUiState, | ||||
|     loginScreenActions: LoginScreenActions, | ||||
| ) { | ||||
|     SimpleScreenTemplate(title = resources().getString(AppText.sign_in)) { | ||||
|         Column( | ||||
|             modifier = modifier | ||||
|  | @ -35,18 +69,42 @@ fun LoginScreen( | |||
|             verticalArrangement = Arrangement.Center, | ||||
|             horizontalAlignment = Alignment.CenterHorizontally | ||||
|         ) { | ||||
|             EmailField(uiState.email, viewModel::onEmailChange, Modifier.fieldModifier()) | ||||
|             PasswordField(uiState.password, viewModel::onPasswordChange, Modifier.fieldModifier()) | ||||
|             EmailField( | ||||
|                 uiState.email, | ||||
|                 loginScreenActions.onEmailChange, | ||||
|                 Modifier.fieldModifier() | ||||
|             ) | ||||
|             PasswordField( | ||||
|                 uiState.password, | ||||
|                 loginScreenActions.onPasswordChange, | ||||
|                 Modifier.fieldModifier() | ||||
|             ) | ||||
|             BasicButton( | ||||
|                 AppText.sign_in, | ||||
|                 Modifier.basicButton(), | ||||
|                 onClick = loginScreenActions.onSignInClick, | ||||
|             ) | ||||
| 
 | ||||
|             BasicButton(AppText.sign_in, Modifier.basicButton()) { viewModel.onSignInClick(openAndPopUp) } | ||||
|             BasicTextButton( | ||||
|                 AppText.not_already_user, | ||||
|                 Modifier.textButton(), | ||||
|                 action = loginScreenActions.onSignUpClick, | ||||
|             ) | ||||
| 
 | ||||
|             BasicTextButton(AppText.not_already_user, Modifier.textButton()) { | ||||
|                 viewModel.onNotAlreadyUser(openAndPopUp) | ||||
|             } | ||||
| 
 | ||||
|             BasicTextButton(AppText.forgot_password, Modifier.textButton()) { | ||||
|                 viewModel.onForgotPasswordClick() | ||||
|             } | ||||
|             BasicTextButton( | ||||
|                 AppText.forgot_password, | ||||
|                 Modifier.textButton(), | ||||
|                 action = loginScreenActions.onForgotPasswordClick, | ||||
|             ) | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @Preview | ||||
| @Composable | ||||
| fun LoginScreenPreview() { | ||||
|     LoginScreen( | ||||
|         uiState = LoginUiState(), | ||||
|         loginScreenActions = LoginScreenActions({}, {}, {}, {}, {}) | ||||
|     ) | ||||
| } | ||||
|  | @ -63,7 +63,7 @@ class LoginViewModel @Inject constructor( | |||
|         } | ||||
|     } | ||||
| 
 | ||||
|     fun onNotAlreadyUser(openAndPopUp: (String, String) -> Unit) { | ||||
|     fun onSignUpClick(openAndPopUp: (String, String) -> Unit) { | ||||
|         openAndPopUp(SIGN_UP_SCREEN, LOGIN_SCREEN) | ||||
|     } | ||||
| } | ||||
		Reference in a new issue
	
	 brreynie
						brreynie