Skip to content

Commit 2cbe779

Browse files
tdrhqclaude
andcommitted
Move hardcoded error messages out of LoginView into previews
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent e20812a commit 2cbe779

1 file changed

Lines changed: 33 additions & 34 deletions

File tree

SampleWorkshopApp/LoginView.swift

Lines changed: 33 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)