aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-03-06 23:37:31 -0800
committerAdam Soltys <[email protected]>2026-03-06 23:37:31 -0800
commit76e0e08ce6575b43901b777ee75b048dce9097ff (patch)
tree29062834e66bb986e3cd484c7bf1acc03acfbd5d /src
parentc36c3c5342682eaee9a5a135e255686ce40bfc3c (diff)
downloadcoinos-ui-76e0e08ce6575b43901b777ee75b048dce9097ff.tar.gz
coinos-ui-76e0e08ce6575b43901b777ee75b048dce9097ff.zip
suppress push notification when user is already on the target page
Co-Authored-By: Claude Opus 4.6 <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/service-worker.js24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/service-worker.js b/src/service-worker.js
index 43f0b60b..b5c3a7c0 100644
--- a/src/service-worker.js
+++ b/src/service-worker.js
@@ -114,14 +114,22 @@ self.addEventListener("fetch", (event) => {
self.addEventListener("push", (event) => {
const { title, body, url } = event.data.json();
- const icon = "/images/icon.png";
- const badge = "/images/badge.png";
- self.registration.showNotification(title, {
- body,
- icon,
- badge,
- data: { url },
- });
+
+ event.waitUntil(
+ clients.matchAll({ type: "window" }).then((clientList) => {
+ const onPage = clientList.some(
+ (c) => c.visibilityState === "visible" && new URL(c.url).pathname.startsWith(url),
+ );
+ if (onPage) return;
+
+ return self.registration.showNotification(title, {
+ body,
+ icon: "/images/icon.png",
+ badge: "/images/badge.png",
+ data: { url },
+ });
+ }),
+ );
});
self.addEventListener("notificationclick", (event) => {