fix(notifications): don't resurrect stale toasts on reload

Persisted notifications were restored with their saved 'dismissed' state, so any
that were still active when the page closed came back as active toasts — but
their auto-dismiss timers aren't re-armed on load, leaving them stuck on screen
forever (a burst of errors could pile up dozens). Mark restored entries as
dismissed on load: they stay in the bell history but no longer reappear as live
toasts. The toast surface is session-transient; history persists.
This commit is contained in:
npeter83 2026-06-12 18:07:31 +02:00
parent 7f9445f4c2
commit 19b5afc8ef

View file

@ -118,7 +118,11 @@ function load(): Notification[] {
try {
const raw = JSON.parse(localStorage.getItem(HISTORY_KEY) || "[]");
if (!Array.isArray(raw)) return [];
return raw.map((n) => ({ ...n, action: undefined }) as Notification);
// Restored entries are history only. Mark them dismissed so they don't
// resurrect as active toasts on reload — their auto-dismiss timers aren't
// re-armed across a reload, so otherwise they'd stick forever. Also drop the
// live `action` callback, which can't survive serialization.
return raw.map((n) => ({ ...n, action: undefined, dismissed: true }) as Notification);
} catch {
return [];
}