//
// ContentView.swift
// Dyana
//
// Created by Zach Wadzinski on 3/29/21.
//
// Copyright Dyana Inc.
import SwiftUI
import Firebase
struct LoginView: View {
@State var email = ""
@State var password = ""
@State var isFocused = false
@State var showAlert = false
@State var alertMessage = "Something went wrong."
@State var isLoading = false
@State var isSuccessful = false
@EnvironmentObject var user: UserStore
@State var signupToggle = false
func hideKeyboard() {
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}
func login() {
self.hideKeyboard()
self.isFocused = false
self.isLoading = true
Auth.auth().signIn(withEmail: email, password: password) { (result, error) in
self.isLoading = false
if error != nil {
self.alertMessage = error?.localizedDescription ?? ""
self.showAlert = true
} else {
self.isSuccessful = true
self.user.isLogged = true
UserDefaults.standard.set(true, forKey: "isLogged")
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
self.isSuccessful = false
self.email = ""
self.password = ""
self.user.showLogin = false
}
}
}
}
var body: some View {
ZStack {
MainPageView()
Color(#colorLiteral(red: 0.9787462354, green: 0.9567045569, blue: 0.9562209249, alpha: 1)).edgesIgnoringSafeArea(/*@START_MENU_TOKEN@*/.all/*@END_MENU_TOKEN@*/)
LoginLogo()
.padding(.top)
VStack {
VinesView()
.padding(.vertical, 30)
LoginTextView()
.padding(.vertical, 40)
GoogleSignInView()
//EmailLoginView(email: $email, password: $password, isFocused: $isFocused)
VStack {
ZStack {
RoundedRectangle(cornerRadius: 8)
.fill(Color(#colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)))
.frame(width: .infinity, height: 46)
HStack {
VStack(alignment: .leading) {
TextField("User Email", text: $email, onEditingChanged: { (changed) in
print("Suggestion onEditingChanged - \(changed)")
})
{
print("Suggestion onCommit")
}.font(.system(size: 14)).foregroundColor(Color(#colorLiteral(red: 0.82, green: 0.82, blue: 0.82, alpha: 1)))
}.keyboardType(.emailAddress)
.onTapGesture {
self.isFocused = true
}
Spacer()
}.padding(.leading)
}.padding(.horizontal, 70)
ZStack {
RoundedRectangle(cornerRadius: 8)
.fill(Color(#colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)))
.frame(width: .infinity, height: 46)
HStack {
VStack(alignment: .leading) {
TextField("Password", text: $password, onEditingChanged: { (changed) in
print("Suggestion onEditingChanged - \(changed)")
}) {
print("Suggestion onCommit")
}.font(.system(size: 14)).foregroundColor(Color(#colorLiteral(red: 0.82, green: 0.82, blue: 0.82, alpha: 1)))
}.onTapGesture {
self.isFocused = true
}
Spacer()
}.padding(.leading)
}.padding(.horizontal, 70)
}
NavigationLink(destination: NameInput()){
Text("Forgot Password?").font(.custom("Lato Medium", size: 12)).foregroundColor(Color(#colorLiteral(red: 0.09, green: 0.78, blue: 0.6, alpha: 1))).multilineTextAlignment(.center)
.frame(width: nil, height: 15)
//.padding(.bottom)
}
Button(action: {
self.login()
})
{
SendLoginView()
.padding(.top,20)
.alert(isPresented: $showAlert) {
Alert(title: Text("Error"), message: Text(self.alertMessage), dismissButton: .default(Text("OK")))
}
}
VStack {
Button(action: {
self.signupToggle.toggle()
}) {
Text("New to Dyana? Create an account.").font(.custom("Lato Medium", size: 12)).foregroundColor(Color(#colorLiteral(red: 0.09, green: 0.78, blue: 0.6, alpha: 1))).multilineTextAlignment(.center)
.frame(width: .infinity, height: 15)
.padding(.bottom)
}
}
}
ShapesView()
if isLoading {
LoadingView()
}
if isSuccessful {
MainPageView()
}
}.offset(y: isFocused ? -300 : 0)
.animation(.easeInOut)
.onTapGesture {
self.isFocused = false
self.hideKeyboard()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
LoginView()
}
}
struct LoginLogo: View {
var body: some View {
VStack {
Image("LoginLogo")
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 134, height: 45)
.clipped()
.frame(width: 134, height: 45)
Spacer()
}
}
}
struct VinesView: View {
var body: some View {
VStack {
//VINES
Image("LoginVines")
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 500, height: 70)
.clipped()
.frame(width: .infinity, height: 45)
}
}
}
struct LoginTextView: View {
var body: some View {
VStack {
Text("Log In").font(.system(size: 26)).fontWeight(.heavy).foregroundColor(Color(#colorLiteral(red: 0.1, green: 0.27, blue: 0.42, alpha: 1))).multilineTextAlignment(.center)
}
}
}
struct GoogleSignInView: View {
var body: some View {
ZStack {
//GOOGLE SIGN IN
RoundedRectangle(cornerRadius: 8)
.fill(Color(#colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)))
.frame(width: .infinity, height: 46)
RoundedRectangle(cornerRadius: 8)
.strokeBorder(Color(#colorLiteral(red: 0.08627451211214066, green: 0.7803921699523926, blue: 0.6039215922355652, alpha: 1)), lineWidth: 1)
.frame(width: .infinity, height: 46)
HStack {
//googlelogo 1
Image("LoginGoogleLogo")
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 29, height: 29)
.clipped()
.frame(width: 29, height: 29)
.padding(.leading, 40)
Spacer()
//Continue with Google
Text("Continue with Google").font(.system(size: 14)).foregroundColor(Color(#colorLiteral(red: 0.09, green: 0.78, blue: 0.6, alpha: 1))).multilineTextAlignment(.center)
.padding(.trailing, 90)
}
}.padding(.horizontal, 70)
}
}
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter