Skip to content

Commit 82015bf

Browse files
refactor: password recovery to use modal
1 parent 6dcf89e commit 82015bf

File tree

1 file changed

+20
-37
lines changed

1 file changed

+20
-37
lines changed

FirebaseSwiftUI/FirebaseAuthSwiftUI/Sources/Views/PasswordRecoveryView.swift

Lines changed: 20 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,21 @@
1515
import FirebaseCore
1616
import SwiftUI
1717

18-
private struct ResultWrapper: Identifiable {
19-
let id = UUID()
20-
let value: Result<Void, Error>
21-
}
22-
2318
public struct PasswordRecoveryView {
2419
@Environment(AuthService.self) private var authService
2520
@State private var email = ""
26-
@State private var resultWrapper: ResultWrapper?
21+
@State private var showSuccessSheet = false
22+
@State private var sentEmail = ""
2723

2824
public init() {}
2925

3026
private func sendPasswordRecoveryEmail() async {
31-
let recoveryResult: Result<Void, Error>
32-
3327
do {
3428
try await authService.sendPasswordRecoveryEmail(email: email)
35-
resultWrapper = ResultWrapper(value: .success(()))
29+
sentEmail = email
30+
showSuccessSheet = true
3631
} catch {
37-
resultWrapper = ResultWrapper(value: .failure(error))
32+
// Error already displayed via modal by AuthService
3833
}
3934
}
4035
}
@@ -94,45 +89,33 @@ extension PasswordRecoveryView: View {
9489
.frame(maxWidth: .infinity)
9590
.buttonStyle(.borderedProminent)
9691
}
97-
.sheet(item: $resultWrapper) { wrapper in
98-
resultSheet(wrapper.value)
92+
.sheet(isPresented: $showSuccessSheet) {
93+
successSheet
9994
}
10095
}
10196

10297
@ViewBuilder
10398
@MainActor
104-
private func resultSheet(_ result: Result<Void, Error>) -> some View {
99+
private var successSheet: some View {
105100
VStack {
106-
switch result {
107-
case .success:
108-
Text(authService.string.passwordRecoveryEmailSentTitle)
109-
.font(.largeTitle)
110-
.fontWeight(.bold)
111-
.padding()
112-
Text(authService.string.passwordRecoveryHelperMessage)
113-
.padding()
114-
115-
Divider()
116-
117-
Text(String(format: authService.string.passwordRecoveryEmailSentMessage, email))
118-
.padding()
119-
120-
case let .failure(error):
121-
Text(authService.string.alertErrorTitle)
122-
.font(.title)
123-
.fontWeight(.semibold)
124-
.padding()
101+
Text(authService.string.passwordRecoveryEmailSentTitle)
102+
.font(.largeTitle)
103+
.fontWeight(.bold)
104+
.padding()
105+
Text(authService.string.passwordRecoveryHelperMessage)
106+
.padding()
125107

126-
Divider()
108+
Divider()
127109

128-
Text(authService.string.localizedErrorMessage(for: error))
129-
.padding()
130-
}
110+
Text(String(format: authService.string.passwordRecoveryEmailSentMessage, sentEmail))
111+
.padding()
131112

132113
Divider()
133114

134115
Button(authService.string.okButtonLabel) {
135-
self.resultWrapper = nil
116+
showSuccessSheet = false
117+
email = ""
118+
authService.authView = .authPicker
136119
}
137120
.padding()
138121
}

0 commit comments

Comments
 (0)