wrap loginscreen in route

This commit is contained in:
brreynie 2023-04-22 22:48:27 +02:00
parent 8fc4ac8cf1
commit de42f090ef
3 changed files with 74 additions and 15 deletions

View file

@ -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) {

View file

@ -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({}, {}, {}, {}, {})
)
}

View file

@ -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)
} }
} }