Untitled
unknown
swift
2 years ago
2.6 kB
12
Indexable
import SwiftUI
import FirebaseAuth
struct LoginView: View {
@State private var email = ""
@State private var password = ""
@EnvironmentObject var viewModel: AuthenticationViewModel
@State private var isLoggedIn = false
var body: some View {
NavigationStack {
VStack {
CachedLogoImage()
.frame(width: 200, height: 200)
.padding(.vertical, 32)
.clipShape(Circle())
VStack(spacing: 16) {
InputView(text: $email,
title: "Email Address",
placeholder: "example@example.com")
.autocorrectionDisabled()
InputView(text: $password, title: "Password", placeholder: "Enter your password", isSecureField: true)
}
.padding(.horizontal)
.padding(.top, 12)
SignInButton(action: signInAction, isEnabled: formIsValid)
Spacer()
NavigationLink(destination: RegistrationView().navigationBarBackButtonHidden(true)) {
HStack(spacing: 3) {
Text("Don't have an account?")
Text("Sign up")
.fontWeight(.bold)
}
.font(.system(size: 14))
}
}
}
}
var formIsValid: Bool {
return !email.isEmpty
&& email.contains("@")
&& !password.isEmpty
&& password.count > 5
}
func signInAction() {
Task {
do {
try await viewModel.signIn(withEmail: email, password: password)
let userExists = try await viewModel.checkIfAuthenticated()
if userExists {
isLoggedIn = true
}
}
}
}
}
struct SignInButton: View {
let action: () -> Void
let isEnabled: Bool
var body: some View {
Button(action: action) {
HStack {
Text("Sign In")
.fontWeight(.semibold)
Image(systemName: "arrow.right")
}
.foregroundColor(.white)
.frame(width: UIScreen.main.bounds.width - 32, height: 48)
}
.background(Color(.systemBlue))
.cornerRadius(10)
.disabled(!isEnabled)
.opacity(isEnabled ? 1.0 : 0.5)
.padding(.top, 24)
}
}
Editor is loading...
Leave a Comment