Merge pull request #1232 from xr843/fix/clear-announcement-toast-stagger-timers
Some checks are pending
Build and Push Docker Images / tag_release (push) Waiting to run
Build and Push Docker Images / build (./surfsense_backend, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_web, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-24.04-arm, linux/arm64, arm64) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_web, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-latest, linux/amd64, amd64) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (backend, surfsense-backend) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (web, surfsense-web) (push) Blocked by required conditions

fix(web): clear announcement stagger timers on unmount
This commit is contained in:
Rohan Verma 2026-04-15 10:47:43 -07:00 committed by GitHub
commit 87452bb315
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -65,7 +65,9 @@ export function AnnouncementToastProvider() {
if (hasChecked.current) return;
hasChecked.current = true;
const timer = setTimeout(() => {
const staggerTimers: ReturnType<typeof setTimeout>[] = [];
const outerTimer = setTimeout(() => {
const authed = isAuthenticated();
const active = getActiveAnnouncements(announcements, authed);
const importantUntoasted = active.filter(
@ -74,11 +76,16 @@ export function AnnouncementToastProvider() {
for (let i = 0; i < importantUntoasted.length; i++) {
const announcement = importantUntoasted[i];
setTimeout(() => showAnnouncementToast(announcement), i * 800);
staggerTimers.push(
setTimeout(() => showAnnouncementToast(announcement), i * 800)
);
}
}, 1500);
return () => clearTimeout(timer);
return () => {
clearTimeout(outerTimer);
for (const id of staggerTimers) clearTimeout(id);
};
}, []);
return null;