AutoCat2/Shared/Views/AuthView.swift
2022-03-05 17:20:15 +03:00

72 lines
2.2 KiB
Swift

import SwiftUI
struct AuthView: View {
enum Field {
case email
case password
}
@ObservedObject var viewModel = AuthVM()
@State private var login: String = ""
@State private var password: String = ""
@State private var showProgress: Bool = false
@State private var alert: AlertMessage? = nil
@FocusState private var focus: Field?
var body: some View {
ZStack {
VStack(alignment: .center, spacing: 16) {
Spacer()
#if os(iOS)
TextField("Login", text: $login)
.focused($focus, equals: .email)
.textContentType(.emailAddress)
.keyboardType(.emailAddress)
#else
TextField("Login", text: $login)
.focused($focus, equals: .email)
#endif
SecureField("Password", text: $password)
.focused($focus, equals: .password)
Button("Login") {
Task.init {
do {
self.focus = nil
self.showProgress = true
try await self.viewModel.login(user: self.login, password: self.password)
self.showProgress = false
} catch {
self.showProgress = false
self.alert = .error(error: error)
}
}
}
.alert(item: $alert, content: Alert.init)
Spacer()
}
.buttonStyle(.bordered)
.controlSize(.large)
.textFieldStyle(.roundedBorder)
.padding(20)
if self.showProgress {
ACProgressView()
}
}
}
}
struct AuthView_Previews: PreviewProvider {
static var previews: some View {
Group {
AuthView()
.previewDevice("iPhone 8")
AuthView()
.preferredColorScheme(.dark)
.previewDevice("iPhone 8")
}
}
}