You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.7 KiB
96 lines
2.7 KiB
//
|
|
// LoginViewModel.swift
|
|
// AllIn
|
|
//
|
|
// Created by Emre on 17/12/2023.
|
|
//
|
|
|
|
import Foundation
|
|
import SwiftUI
|
|
import DependencyInjection
|
|
|
|
class LoginViewModel: ObservableObject {
|
|
|
|
@Inject var authService: IAuthService
|
|
@Published var loginIdentifier: String = ""
|
|
@Published var loginPassword: String = ""
|
|
|
|
@Published var loginIdentifierFieldError: String?
|
|
@Published var loginPasswordFieldError: String?
|
|
|
|
@Published var errorMessage: String?
|
|
@Published var showErrorMessage = false
|
|
|
|
func login() {
|
|
|
|
#if DEBUG
|
|
self.onLoginSuccess()
|
|
#endif
|
|
|
|
guard checkAndSetError(forLogin: true, forPassword: true) else {
|
|
return
|
|
}
|
|
|
|
self.showErrorMessage = false
|
|
resetAllFieldErrors()
|
|
|
|
authService.login(login: loginIdentifier, password: loginPassword) { statusCode in
|
|
switch statusCode {
|
|
case 200:
|
|
self.onLoginSuccess()
|
|
case 404:
|
|
AppStateContainer.shared.loggedState.connectedUser = false
|
|
self.setErrorMessage(errorMessage: "Login ou mot de passe incorrects.")
|
|
default:
|
|
AppStateContainer.shared.loggedState.connectedUser = false
|
|
self.setErrorMessage(errorMessage: "La connexion a échoué. Veuillez réessayer.")
|
|
}
|
|
}
|
|
}
|
|
|
|
private func onLoginSuccess() {
|
|
AppStateContainer.shared.loggedState.connectedUser = true
|
|
}
|
|
|
|
func checkAndSetError(forLogin checkLogin: Bool, forPassword checkPassword: Bool) -> Bool {
|
|
var newLoginIdentifierFieldError: String?
|
|
var newLoginPasswordFieldError: String?
|
|
var hasError = false
|
|
|
|
// Login
|
|
if checkLogin, loginIdentifier.isEmpty {
|
|
newLoginIdentifierFieldError = "Veuillez saisir votre identifiant."
|
|
hasError = true
|
|
}
|
|
|
|
// Password
|
|
if checkPassword, loginPassword.isEmpty {
|
|
newLoginPasswordFieldError = "Veuillez saisir votre mot de passe."
|
|
hasError = true
|
|
}
|
|
|
|
if !hasError {
|
|
// No error
|
|
return true
|
|
}
|
|
|
|
withAnimation {
|
|
loginIdentifierFieldError = newLoginIdentifierFieldError
|
|
loginPasswordFieldError = newLoginPasswordFieldError
|
|
}
|
|
return false
|
|
}
|
|
|
|
func resetAllFieldErrors() {
|
|
withAnimation {
|
|
loginIdentifierFieldError = nil
|
|
loginPasswordFieldError = nil
|
|
}
|
|
}
|
|
|
|
func setErrorMessage(errorMessage: String) {
|
|
self.showErrorMessage = true
|
|
self.errorMessage = errorMessage
|
|
}
|
|
}
|