Fix error alert infinite loop in ClubsView and ChallengesView (FRE-4664)

- Replace unused lastError state with alertIsPresented boolean
- OK button now clears viewModel.error to prevent re-trigger
- Add onChange observer to show alert when error becomes non-nil
- Applies to both ClubsView.swift and ChallengesView.swift

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
2026-05-10 10:42:40 -04:00
parent 9b14011dfa
commit d74f65b9d5
2 changed files with 22 additions and 6 deletions

View File

@@ -4,7 +4,7 @@ struct ChallengesView: View {
@StateObject private var viewModel = ChallengeViewModel()
@State private var showingCreateSheet = false
@State private var selectedTab: ChallengeTab = .active
@State private var lastError: ChallengeError?
@State private var alertIsPresented = false
enum ChallengeTab: String, CaseIterable {
case active, upcoming, completed
@@ -35,11 +35,19 @@ struct ChallengesView: View {
.sheet(isPresented: $showingCreateSheet) {
CreateChallengeSheet(viewModel: viewModel)
}
.alert("Error", isPresented: .init(get: { viewModel.error != nil }, set: { if !$0 { lastError = viewModel.error } })) {
Button("OK") { lastError = viewModel.error }
.alert("Error", isPresented: $alertIsPresented) {
Button("OK") {
viewModel.error = nil
alertIsPresented = false
}
} message: {
Text(viewModel.error?.errorDescription ?? "")
}
.onChange(of: viewModel.error) { _ in
if viewModel.error != nil {
alertIsPresented = true
}
}
}
.onAppear {
Task {

View File

@@ -4,7 +4,7 @@ struct ClubsView: View {
@StateObject private var viewModel = ClubViewModel()
@State private var showingCreateSheet = false
@State private var selectedTab: ClubTab = .discover
@State private var lastError: ClubError?
@State private var alertIsPresented = false
enum ClubTab: String, CaseIterable {
case discover, myClubs
@@ -35,11 +35,19 @@ struct ClubsView: View {
.sheet(isPresented: $showingCreateSheet) {
CreateClubSheet(viewModel: viewModel)
}
.alert("Error", isPresented: .init(get: { viewModel.error != nil }, set: { if !$0 { lastError = nil } })) {
Button("OK") { lastError = viewModel.error }
.alert("Error", isPresented: $alertIsPresented) {
Button("OK") {
viewModel.error = nil
alertIsPresented = false
}
} message: {
Text(viewModel.error?.errorDescription ?? "")
}
.onChange(of: viewModel.error) { _ in
if viewModel.error != nil {
alertIsPresented = true
}
}
}
.onAppear {
Task {