From d74f65b9d59386a26637948189c0632b4dff5b88 Mon Sep 17 00:00:00 2001 From: Michael Freno Date: Sun, 10 May 2026 10:42:40 -0400 Subject: [PATCH] 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 --- Lendair/Views/ChallengesView.swift | 14 +++++++++++--- Lendair/Views/ClubsView.swift | 14 +++++++++++--- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/Lendair/Views/ChallengesView.swift b/Lendair/Views/ChallengesView.swift index cdda4b12f..991883747 100644 --- a/Lendair/Views/ChallengesView.swift +++ b/Lendair/Views/ChallengesView.swift @@ -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 { diff --git a/Lendair/Views/ClubsView.swift b/Lendair/Views/ClubsView.swift index 5d05b3286..3bb278ece 100644 --- a/Lendair/Views/ClubsView.swift +++ b/Lendair/Views/ClubsView.swift @@ -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 {