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.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.LoginScreen | import be.ugent.sel.studeez.screens.log_in.LoginScreen | ||||||
| import be.ugent.sel.studeez.screens.profile.EditProfileScreen | import be.ugent.sel.studeez.screens.profile.EditProfileScreen | ||||||
| import be.ugent.sel.studeez.screens.profile.ProfileScreen | import be.ugent.sel.studeez.screens.profile.ProfileScreen | ||||||
|  | @ -105,7 +106,7 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     composable(StudeezDestinations.LOGIN_SCREEN) { |     composable(StudeezDestinations.LOGIN_SCREEN) { | ||||||
|         LoginScreen(openAndPopUp) |         LoginRoute(openAndPopUp, viewModel = hiltViewModel()) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     composable(StudeezDestinations.SIGN_UP_SCREEN) { |     composable(StudeezDestinations.SIGN_UP_SCREEN) { | ||||||
|  |  | ||||||
|  | @ -10,7 +10,7 @@ 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.* | ||||||
| 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 | ||||||
|  | @ -18,14 +18,48 @@ 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 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 | @Composable | ||||||
| fun LoginScreen( | fun LoginRoute( | ||||||
|     openAndPopUp: (String, String) -> Unit, |     openAndPopUp: (String, String) -> Unit, | ||||||
|     modifier: Modifier = Modifier, |     modifier: Modifier = Modifier, | ||||||
|     viewModel: LoginViewModel = hiltViewModel() |     viewModel: LoginViewModel, | ||||||
| ) { | ) { | ||||||
|     val uiState by viewModel.uiState |     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)) { |     SimpleScreenTemplate(title = resources().getString(AppText.sign_in)) { | ||||||
|         Column( |         Column( | ||||||
|             modifier = modifier |             modifier = modifier | ||||||
|  | @ -35,18 +69,42 @@ fun LoginScreen( | ||||||
|             verticalArrangement = Arrangement.Center, |             verticalArrangement = Arrangement.Center, | ||||||
|             horizontalAlignment = Alignment.CenterHorizontally |             horizontalAlignment = Alignment.CenterHorizontally | ||||||
|         ) { |         ) { | ||||||
|             EmailField(uiState.email, viewModel::onEmailChange, Modifier.fieldModifier()) |             EmailField( | ||||||
|             PasswordField(uiState.password, viewModel::onPasswordChange, Modifier.fieldModifier()) |                 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()) { |             BasicTextButton( | ||||||
|                 viewModel.onNotAlreadyUser(openAndPopUp) |                 AppText.forgot_password, | ||||||
|             } |                 Modifier.textButton(), | ||||||
| 
 |                 action = loginScreenActions.onForgotPasswordClick, | ||||||
|             BasicTextButton(AppText.forgot_password, Modifier.textButton()) { |             ) | ||||||
|                 viewModel.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) |         openAndPopUp(SIGN_UP_SCREEN, LOGIN_SCREEN) | ||||||
|     } |     } | ||||||
| } | } | ||||||
		Reference in a new issue
	
	 brreynie
						brreynie