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:
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user