AutoCat2/AutoCat2SUI/Screens/Auth/AuthView.swift

73 lines
2.1 KiB
Swift

//
// AuthView.swift
// AutoCat2SUI
//
// Created by Selim Mustafaev on 24.07.2022.
//
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 {
AuthView()
}
}