// Service Worker pro Web Push notifikace (připomínka výběru oběda, doručení objednávky) self.addEventListener('push', (event) => { const data = event.data?.json() ?? { title: 'Luncher', body: 'Ještě nemáte zvolený oběd!' }; event.waitUntil( self.registration.showNotification(data.title, { body: data.body, icon: '/favicon.ico', tag: data.tag ?? 'lunch-reminder', data: { login: data.login, token: data.token, url: data.url }, // Token posílá jen připomínka oběda — ostatní notifikace tlačítko nemají. actions: data.token ? [{ action: 'neobedvam', title: 'Mám vlastní/neobědvám' }] : [], }) ); }); self.addEventListener('notificationclick', (event) => { event.notification.close(); if (event.action === 'neobedvam') { const { login, token } = event.notification.data ?? {}; if (login && token) { event.waitUntil( fetch('/api/notifications/push/quickChoice', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ login, token }), }) ); } return; } const url = event.notification.data?.url ?? '/'; event.waitUntil( self.clients.matchAll({ type: 'window' }).then((clientList) => { for (const client of clientList) { if (client.url.includes(self.location.origin) && 'focus' in client) { if ('navigate' in client) client.navigate(url).catch(() => {}); return client.focus(); } } return self.clients.openWindow(url); }) ); });