feat(push): smart push queueing with page-visibility fast path and app-ping/pong fallback

This commit is contained in:
2026-06-04 22:10:48 -04:00
parent fc0527e9e7
commit 4e6dfb4726
16 changed files with 192 additions and 60 deletions
+11 -3
View File
@@ -116,10 +116,18 @@ export function App() {
}, [dismissInstall]);
// PWA: Service worker update notification
// Only show banner when replacing an existing controller (real update),
// not on first registration when clients.claim() fires controllerchange
// on a previously uncontrolled page.
useEffect(() => {
const handleControllerChange = () => setSwUpdateAvailable(true);
navigator.serviceWorker?.addEventListener('controllerchange', handleControllerChange);
return () => navigator.serviceWorker?.removeEventListener('controllerchange', handleControllerChange);
if (!navigator.serviceWorker) return;
let hadController = !!navigator.serviceWorker.controller;
const handleControllerChange = () => {
if (hadController) setSwUpdateAvailable(true);
hadController = true;
};
navigator.serviceWorker.addEventListener('controllerchange', handleControllerChange);
return () => navigator.serviceWorker.removeEventListener('controllerchange', handleControllerChange);
}, []);
// PWA iOS: Sync --app-height CSS variable to the true viewport height.