diff options
Diffstat (limited to 'androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginViewModel.kt')
-rw-r--r-- | androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginViewModel.kt | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginViewModel.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginViewModel.kt new file mode 100644 index 0000000..9df78aa --- /dev/null +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/LoginViewModel.kt @@ -0,0 +1,57 @@ +package mx.trackermap.TrackerMap.android.session + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.SavedStateHandle +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.zhuinden.eventemitter.EventEmitter +import com.zhuinden.eventemitter.EventSource +import kotlinx.coroutines.launch +import mx.trackermap.TrackerMap.client.apis.SessionApi + +class LoginViewModel( + private val sessionApi: SessionApi, + savedStateHandle: SavedStateHandle +) : ViewModel() { + + sealed class LoginResult { + object Loading: LoginResult() + object EmailMissing : LoginResult() + object PasswordMissing : LoginResult() + object Failure : LoginResult() + object Success : LoginResult() + } + + val email: MutableLiveData<String> = savedStateHandle.getLiveData("user", "") + val password: MutableLiveData<String> = savedStateHandle.getLiveData("password", "") + + private val loginResultEmitter = EventEmitter<LoginResult>() + val loginResult: EventSource<LoginResult> = loginResultEmitter + + fun login() { + val email = email.value!!.toString().trim() + val password = password.value!!.toString().trim() + + if (email.isEmpty()) { + loginResultEmitter.emit(LoginResult.EmailMissing) + return + } + + if (password.isEmpty()) { + loginResultEmitter.emit(LoginResult.PasswordMissing) + return + } + + loginResultEmitter.emit(LoginResult.Loading) + viewModelScope.launch { + try { + val user = sessionApi.sessionPost(email, password) + Log.d("LoginViewModel", user.toString()) + loginResultEmitter.emit(LoginResult.Success) + } catch (e: Exception) { + loginResultEmitter.emit(LoginResult.Failure) + } + } + } +}
\ No newline at end of file |