added login viewmodel
This commit is contained in:
		
							parent
							
								
									ad6b7bea68
								
							
						
					
					
						commit
						d21146494b
					
				
					 1 changed files with 69 additions and 0 deletions
				
			
		|  | @ -0,0 +1,69 @@ | |||
| package be.ugent.sel.studeez.screens.sign_in | ||||
| 
 | ||||
| import androidx.compose.runtime.mutableStateOf | ||||
| import be.ugent.sel.studeez.common.ext.isValidEmail | ||||
| 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 | ||||
| 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 javax.inject.Inject | ||||
| import be.ugent.sel.studeez.R.string as AppText | ||||
| 
 | ||||
| @HiltViewModel | ||||
| class LoginViewModel @Inject constructor( | ||||
|     private val accountDAO: AccountDAO, | ||||
|     logService: LogService | ||||
| ) : StudeezViewModel(logService) { | ||||
|     var uiState = mutableStateOf(LoginUiState()) | ||||
|         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 onSignInClick(openAndPopUp: (String, String) -> Unit) { | ||||
|         if (!email.isValidEmail()) { | ||||
|             SnackbarManager.showMessage(AppText.email_error) | ||||
|             return | ||||
|         } | ||||
| 
 | ||||
|         if (password.isBlank()) { | ||||
|             SnackbarManager.showMessage(AppText.empty_password_error) | ||||
|             return | ||||
|         } | ||||
| 
 | ||||
|         launchCatching { | ||||
|             accountDAO.signInWithEmailAndPassword(email, password) | ||||
|             openAndPopUp(SIGN_UP_SCREEN, LOGIN_SCREEN) // Is not reached when error occurs. | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     fun onForgotPasswordClick() { | ||||
|         if (!email.isValidEmail()) { | ||||
|             SnackbarManager.showMessage(AppText.email_error) | ||||
|             return | ||||
|         } | ||||
| 
 | ||||
|         launchCatching { | ||||
|             accountDAO.sendRecoveryEmail(email) | ||||
|             SnackbarManager.showMessage(AppText.recovery_email_sent) | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     fun onNotAlreadyUser(openAndPopUp: (String, String) -> Unit) { | ||||
|         openAndPopUp(SIGN_UP_SCREEN, LOGIN_SCREEN) | ||||
|     } | ||||
| } | ||||
		Reference in a new issue
	
	 lbarraga
						lbarraga