self.addEventListener('install', (event) => { event.waitUntil(self.skipWaiting()); console.log('Service worker installing...'); }); self.addEventListener('activate', (event) => { event.waitUntil(self.clients.claim()); console.log('Service worker activating...'); }); self.addEventListener('push', function (event) { console.log('Push event received:', event); let title = "Sistem Desa Mandiri"; let options = { body: "Default notification body", icon: '/icon-192x192.png', badge: '/icon-192x192.png', image: '/icon-192x192.png', vibrate: [100, 50, 100], data: { dateOfArrival: Date.now(), primaryKey: '2', }, }; if (event.data) { try { const data = event.data.json(); title = data.title || title; options.body = data.body || options.body; options.icon = data.icon || options.icon; options.badge = data.badge || options.badge; options.image = data.image || options.image; options.data = { ...options.data, ...data.data, // Merging additional data from the event }; } catch (e) { console.error("Error parsing push event data:", e); } } else { console.warn("Push event has no data."); } event.waitUntil( self.registration.showNotification(title, options) .then(() => console.log('Notification shown.', JSON.stringify(options, null, 2))) .catch(err => { console.error("Error showing notification:", err); }) ); }); self.addEventListener('notificationclick', function (event) { console.log('Notification click received.'); event.notification.close(); // Close the notification event.waitUntil( clients.matchAll({ type: 'window', includeUncontrolled: true }).then((clientList) => { for (const client of clientList) { if (client.url.includes('http://localhost:3005') && 'focus' in client) { return client.focus(); } } if (clients.openWindow) { return clients.openWindow('http://localhost:3005'); } }).catch(err => { console.error("Error handling notification click:", err); }) ); });