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