46 lines
1.4 KiB
JavaScript
46 lines
1.4 KiB
JavaScript
// Service Worker pro Web Push notifikace (připomínka výběru oběda)
|
|
|
|
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: 'lunch-reminder',
|
|
data: { login: data.login },
|
|
actions: [
|
|
{ action: 'neobedvam', title: 'Mám vlastní/neobědvám' },
|
|
],
|
|
})
|
|
);
|
|
});
|
|
|
|
self.addEventListener('notificationclick', (event) => {
|
|
event.notification.close();
|
|
|
|
if (event.action === 'neobedvam') {
|
|
const login = event.notification.data?.login;
|
|
if (login) {
|
|
event.waitUntil(
|
|
fetch('/api/notifications/push/quickChoice', {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ login }),
|
|
})
|
|
);
|
|
}
|
|
return;
|
|
}
|
|
|
|
event.waitUntil(
|
|
self.clients.matchAll({ type: 'window' }).then((clientList) => {
|
|
for (const client of clientList) {
|
|
if (client.url.includes(self.location.origin) && 'focus' in client) {
|
|
return client.focus();
|
|
}
|
|
}
|
|
return self.clients.openWindow('/');
|
|
})
|
|
);
|
|
});
|