54 lines
1.5 KiB
JavaScript
54 lines
1.5 KiB
JavaScript
import { precacheAndRoute } from "workbox-precaching";
|
|
|
|
// Precaching configuration for PWA assets
|
|
precacheAndRoute(self.__WB_MANIFEST);
|
|
|
|
const VERSION = "1.0.0";
|
|
|
|
// Service Worker Installation
|
|
self.addEventListener("install", (event) => {
|
|
self.skipWaiting(); // Force activate new SW immediately
|
|
console.log("Service Worker installed");
|
|
});
|
|
|
|
// Service Worker Activation
|
|
self.addEventListener("activate", (event) => {
|
|
event.waitUntil(self.clients.claim());
|
|
console.log("Service Worker activated");
|
|
});
|
|
|
|
// Push Notification Handler for Django Web Push
|
|
self.addEventListener("push", (event) => {
|
|
try {
|
|
const payload = event.data?.json() || {
|
|
title: "New Notification",
|
|
body: "You have a new message",
|
|
icon: "/logo-192x192.png",
|
|
data: { url: "/" },
|
|
};
|
|
|
|
event.waitUntil(
|
|
self.registration.showNotification(payload.title, {
|
|
body: payload.body,
|
|
icon: payload.icon || "/logo-192x192.png",
|
|
data: payload.data,
|
|
})
|
|
);
|
|
} catch (error) {
|
|
console.error("Push handling failed:", error);
|
|
}
|
|
});
|
|
|
|
// Notification Click Handler
|
|
self.addEventListener("notificationclick", (event) => {
|
|
event.notification.close();
|
|
event.waitUntil(clients.openWindow(event.notification.data?.url || "/"));
|
|
});
|
|
|
|
self.addEventListener("message", (event) => {
|
|
if (event.data === "SKIP_WAITING") {
|
|
self.skipWaiting();
|
|
self.clients.claim();
|
|
}
|
|
});
|