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()) {
|
@Preview
|
||||||
viewModel.onForgotPasswordClick()
|
@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