added sign up viewmodel

This commit is contained in:
lbarraga 2023-04-08 22:34:16 +02:00
parent 2f5e7e31aa
commit d3d5bb7dbe

View file

@ -0,0 +1,67 @@
package be.ugent.sel.studeez.screens.sign_up
import androidx.compose.runtime.mutableStateOf
import be.ugent.sel.studeez.common.ext.isValidEmail
import be.ugent.sel.studeez.common.ext.isValidPassword
import be.ugent.sel.studeez.common.ext.passwordMatches
import be.ugent.sel.studeez.common.snackbar.SnackbarManager
import be.ugent.sel.studeez.domain.AccountDAO
import be.ugent.sel.studeez.domain.LogService
import be.ugent.sel.studeez.navigation.StudeezDestinations.LOGIN_SCREEN
import be.ugent.sel.studeez.navigation.StudeezDestinations.SIGN_UP_SCREEN
import be.ugent.sel.studeez.screens.StudeezViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import be.ugent.sel.studeez.R.string as AppText
import javax.inject.Inject
@HiltViewModel
class SignUpViewModel @Inject constructor(
private val accountService: AccountDAO,
logService: LogService
) : StudeezViewModel(logService) {
var uiState = mutableStateOf(SignUpUiState())
private set
private val email
get() = uiState.value.email
private val password
get() = uiState.value.password
fun onEmailChange(newValue: String) {
uiState.value = uiState.value.copy(email = newValue)
}
fun onPasswordChange(newValue: String) {
uiState.value = uiState.value.copy(password = newValue)
}
fun onRepeatPasswordChange(newValue: String) {
uiState.value = uiState.value.copy(repeatPassword = newValue)
}
fun onSignUpClick(openAndPopUp: (String, String) -> Unit) {
if (!email.isValidEmail()) {
SnackbarManager.showMessage(AppText.email_error)
return
}
if (!password.isValidPassword()) {
SnackbarManager.showMessage(AppText.password_error)
return
}
if (!password.passwordMatches(uiState.value.repeatPassword)) {
SnackbarManager.showMessage(AppText.password_match_error)
return
}
launchCatching {
accountService.signUpWithEmailAndPassword(email, password)
openAndPopUp(LOGIN_SCREEN, SIGN_UP_SCREEN)
}
}
fun onLoginScreenClick(openAndPopUp: (String, String) -> Unit) {
openAndPopUp(LOGIN_SCREEN, SIGN_UP_SCREEN)
}
}