@@ -85,10 +85,12 @@ struct AlertsView: View {
85 // The manual Refresh/Retry buttons spawn detached Tasks not tied to
85 // The manual Refresh/Retry buttons spawn detached Tasks not tied to
86 // `.task(id: stream)` cancellation, so a slow refresh for the old stream
86 // `.task(id: stream)` cancellation, so a slow refresh for the old stream
87 // can resolve after a switch. Drop stale results.
87 // can resolve after a switch. Drop stale results.
88+ // Still clear isLoading on the stale path: this task set the spinner,
89+ // so leaving it true wedges the ProgressView and disables Refresh.
88− guard stream == appState.selectedStream else { return }
90+ guard stream == appState.selectedStream else { isLoading = false; return }
89 alertConfig = config
91 alertConfig = config
91− guard stream == appState.selectedStream else { return }
93+ guard stream == appState.selectedStream else { isLoading = false; return }
92 errorMessage = ParseableError.userFriendlyMessage(for: error)
94 errorMessage = ParseableError.userFriendlyMessage(for: error)