Add lead workflows, PDF signing, AR projects and photo gallery integration
This commit is contained in:
47
GasTankAR/Views/LoginViewModel.swift
Normal file
47
GasTankAR/Views/LoginViewModel.swift
Normal file
@ -0,0 +1,47 @@
|
||||
import Foundation
|
||||
import Observation
|
||||
|
||||
@MainActor
|
||||
@Observable
|
||||
final class LoginViewModel {
|
||||
var salesCode = "" {
|
||||
didSet { errorMessage = nil }
|
||||
}
|
||||
private(set) var isLoading = false
|
||||
private(set) var errorMessage: LocalizedStringResource?
|
||||
|
||||
@ObservationIgnored private let loginUseCase: any LoginUseCase
|
||||
|
||||
init(loginUseCase: any LoginUseCase) {
|
||||
self.loginUseCase = loginUseCase
|
||||
}
|
||||
|
||||
var canSubmit: Bool {
|
||||
SalesCodeValidator.isValid(salesCode) && !isLoading
|
||||
}
|
||||
|
||||
func signIn() async -> LoginSession? {
|
||||
guard !isLoading else { return nil }
|
||||
errorMessage = nil
|
||||
isLoading = true
|
||||
defer { isLoading = false }
|
||||
|
||||
do {
|
||||
let session = try await loginUseCase.execute(salesCode: salesCode)
|
||||
try Task.checkCancellation()
|
||||
return session
|
||||
} catch is CancellationError {
|
||||
return nil
|
||||
} catch {
|
||||
switch error as? LoginError {
|
||||
case .invalidSalesCode:
|
||||
errorMessage = "Bitte gib ein Kürzel mit mindestens 3 Zeichen ein."
|
||||
case .rejected:
|
||||
errorMessage = "Das Kürzel wurde nicht erkannt. Bitte prüfe deine Eingabe."
|
||||
default:
|
||||
errorMessage = "Die Anmeldung ist derzeit nicht möglich. Bitte versuche es erneut."
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user