revite/src/sw.ts

46 lines
1.5 KiB
TypeScript
Raw Normal View History

2021-06-22 09:22:35 -04:00
/// <reference lib="webworker" />
2021-07-05 06:23:23 -04:00
import { precacheAndRoute } from "workbox-precaching";
2021-06-22 09:22:35 -04:00
2021-07-05 06:23:23 -04:00
declare let self: ServiceWorkerGlobalScope;
2021-06-22 09:22:35 -04:00
2021-07-05 06:23:23 -04:00
self.addEventListener("message", (event) => {
2021-07-05 06:25:20 -04:00
if (event.data && event.data.type === "SKIP_WAITING") self.skipWaiting();
2021-07-05 06:23:23 -04:00
});
precacheAndRoute(self.__WB_MANIFEST);
2021-07-05 06:23:23 -04:00
self.addEventListener("push", (event) => {
2021-07-05 06:25:20 -04:00
async function process() {
if (event.data === null) return;
2021-08-05 09:47:00 -04:00
// Need to write notification generator on server.
2021-07-05 06:25:20 -04:00
}
event.waitUntil(process());
});
// ? Open the app on notification click.
// https://stackoverflow.com/a/39457287
self.addEventListener("notificationclick", (event) => {
const url = event.notification.data;
2021-07-05 06:25:20 -04:00
event.notification.close();
event.waitUntil(
self.clients
.matchAll({ includeUncontrolled: true, type: "window" })
.then((windowClients) => {
// Check if there is already a window/tab open with the target URL
for (let i = 0; i < windowClients.length; i++) {
const client = windowClients[i];
2021-07-05 06:25:20 -04:00
// If so, just focus it.
if (client.url === url && "focus" in client) {
return client.focus();
}
}
// If not, then open the target URL in a new window/tab.
if (self.clients.openWindow) {
return self.clients.openWindow(url);
}
}),
);
});