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()
|
@StateObject private var viewModel = ChallengeViewModel()
|
||||||
@State private var showingCreateSheet = false
|
@State private var showingCreateSheet = false
|
||||||
@State private var selectedTab: ChallengeTab = .active
|
@State private var selectedTab: ChallengeTab = .active
|
||||||
@State private var lastError: ChallengeError?
|
@State private var alertIsPresented = false
|
||||||
|
|
||||||
enum ChallengeTab: String, CaseIterable {
|
enum ChallengeTab: String, CaseIterable {
|
||||||
case active, upcoming, completed
|
case active, upcoming, completed
|
||||||
@@ -35,11 +35,19 @@ struct ChallengesView: View {
|
|||||||
.sheet(isPresented: $showingCreateSheet) {
|
.sheet(isPresented: $showingCreateSheet) {
|
||||||
CreateChallengeSheet(viewModel: viewModel)
|
CreateChallengeSheet(viewModel: viewModel)
|
||||||
}
|
}
|
||||||
.alert("Error", isPresented: .init(get: { viewModel.error != nil }, set: { if !$0 { lastError = viewModel.error } })) {
|
.alert("Error", isPresented: $alertIsPresented) {
|
||||||
Button("OK") { lastError = viewModel.error }
|
Button("OK") {
|
||||||
|
viewModel.error = nil
|
||||||
|
alertIsPresented = false
|
||||||
|
}
|
||||||
} message: {
|
} message: {
|
||||||
Text(viewModel.error?.errorDescription ?? "")
|
Text(viewModel.error?.errorDescription ?? "")
|
||||||
}
|
}
|
||||||
|
.onChange(of: viewModel.error) { _ in
|
||||||
|
if viewModel.error != nil {
|
||||||
|
alertIsPresented = true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.onAppear {
|
.onAppear {
|
||||||
Task {
|
Task {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ struct ClubsView: View {
|
|||||||
@StateObject private var viewModel = ClubViewModel()
|
@StateObject private var viewModel = ClubViewModel()
|
||||||
@State private var showingCreateSheet = false
|
@State private var showingCreateSheet = false
|
||||||
@State private var selectedTab: ClubTab = .discover
|
@State private var selectedTab: ClubTab = .discover
|
||||||
@State private var lastError: ClubError?
|
@State private var alertIsPresented = false
|
||||||
|
|
||||||
enum ClubTab: String, CaseIterable {
|
enum ClubTab: String, CaseIterable {
|
||||||
case discover, myClubs
|
case discover, myClubs
|
||||||
@@ -35,11 +35,19 @@ struct ClubsView: View {
|
|||||||
.sheet(isPresented: $showingCreateSheet) {
|
.sheet(isPresented: $showingCreateSheet) {
|
||||||
CreateClubSheet(viewModel: viewModel)
|
CreateClubSheet(viewModel: viewModel)
|
||||||
}
|
}
|
||||||
.alert("Error", isPresented: .init(get: { viewModel.error != nil }, set: { if !$0 { lastError = nil } })) {
|
.alert("Error", isPresented: $alertIsPresented) {
|
||||||
Button("OK") { lastError = viewModel.error }
|
Button("OK") {
|
||||||
|
viewModel.error = nil
|
||||||
|
alertIsPresented = false
|
||||||
|
}
|
||||||
} message: {
|
} message: {
|
||||||
Text(viewModel.error?.errorDescription ?? "")
|
Text(viewModel.error?.errorDescription ?? "")
|
||||||
}
|
}
|
||||||
|
.onChange(of: viewModel.error) { _ in
|
||||||
|
if viewModel.error != nil {
|
||||||
|
alertIsPresented = true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.onAppear {
|
.onAppear {
|
||||||
Task {
|
Task {
|
||||||
|
|||||||
Reference in New Issue
Block a user