@@ -12,7 +12,9 @@ struct LoginView: View {
1212 @State var email = " "
1313 @State var password = " "
1414 @State private var isLoggedIn = false
15- @State var errorMessage : String ?
15+ @State var bannerMessage : String ?
16+ @State var emailError : String ?
17+ @State var passwordError : String ?
1618
1719 var body : some View {
1820 if isLoggedIn {
@@ -43,21 +45,21 @@ struct LoginView: View {
4345 . padding ( . bottom, 40 )
4446
4547 // Error banner
46- if let bannerText = errorBannerText {
47- ErrorBanner ( bannerText )
48+ if let bannerMessage {
49+ ErrorBanner ( bannerMessage )
4850 . padding ( . horizontal, AppTheme . horizontalPadding)
4951 . padding ( . bottom, 12 )
5052 }
5153
5254 // Input fields
5355 VStack ( spacing: 16 ) {
54- StyledTextField ( " Email " , text: $email, hasError: fieldHasError ( " email " ) , errorMessage: " Please enter a valid email address " )
56+ StyledTextField ( " Email " , text: $email, hasError: emailError != nil , errorMessage: emailError )
5557 . textContentType ( . emailAddress)
5658 . keyboardType ( . emailAddress)
5759 . autocorrectionDisabled ( )
5860 . textInputAutocapitalization ( . never)
5961
60- StyledTextField ( " Password " , text: $password, isSecure: true , hasError: fieldHasError ( " password " ) , errorMessage: " Password is required " )
62+ StyledTextField ( " Password " , text: $password, isSecure: true , hasError: passwordError != nil , errorMessage: passwordError )
6163 . textContentType ( . password)
6264 }
6365 . padding ( . horizontal, AppTheme . horizontalPadding)
@@ -105,55 +107,52 @@ struct LoginView: View {
105107 }
106108
107109 private func attemptSignIn( ) {
110+ bannerMessage = nil
111+ emailError = nil
112+ passwordError = nil
113+
108114 if email. isEmpty && password. isEmpty {
109- errorMessage = " emptyFields "
115+ bannerMessage = " Please fill in all fields "
116+ emailError = " Email is required "
117+ passwordError = " Password is required "
110118 } else if email. isEmpty || !email. contains ( " @ " ) {
111- errorMessage = " invalidEmail "
119+ bannerMessage = " Please enter a valid email address "
120+ emailError = " Please enter a valid email address "
112121 } else if password. isEmpty {
113- errorMessage = " missingPassword "
122+ bannerMessage = " Password is required "
123+ passwordError = " Password is required "
114124 } else {
115- errorMessage = nil
116125 isLoggedIn = true
117126 }
118127 }
119-
120- private func fieldHasError( _ field: String ) -> Bool {
121- guard let error = errorMessage else { return false }
122- switch field {
123- case " email " :
124- return error == " emptyFields " || error == " invalidEmail "
125- case " password " :
126- return error == " emptyFields " || error == " missingPassword "
127- default :
128- return false
129- }
130- }
131-
132- private var errorBannerText : String ? {
133- guard let error = errorMessage else { return nil }
134- switch error {
135- case " emptyFields " : return " Please fill in all fields "
136- case " invalidEmail " : return " Please enter a valid email address "
137- case " missingPassword " : return " Password is required "
138- default : return nil
139- }
140- }
141128}
142129
143130#Preview( " Default " ) {
144131 LoginView ( )
145132}
146133
147134#Preview( " Empty Fields Error " ) {
148- LoginView ( errorMessage: " emptyFields " )
135+ LoginView (
136+ bannerMessage: " Please fill in all fields " ,
137+ emailError: " Email is required " ,
138+ passwordError: " Password is required "
139+ )
149140}
150141
151142#Preview( " Invalid Email Error " ) {
152- LoginView ( email: " bad-email " , errorMessage: " invalidEmail " )
143+ LoginView (
144+ email: " bad-email " ,
145+ bannerMessage: " Please enter a valid email address " ,
146+ emailError: " Please enter a valid email address "
147+ )
153148}
154149
155150#Preview( " Missing Password Error " ) {
156- LoginView ( email: " user@example.com " , errorMessage: " missingPassword " )
151+ LoginView (
152+ email: " user@example.com " ,
153+ bannerMessage: " Password is required " ,
154+ passwordError: " Password is required "
155+ )
157156}
158157
159158#Preview( " Filled In " ) {
0 commit comments