feat(notifications): add browser push notifications for calendar events with personal profile settings
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
/**
|
||||
* Fociz Service Worker
|
||||
* Beheert desktop push notificaties en click events voor agenda-afspraken.
|
||||
*/
|
||||
|
||||
self.addEventListener('install', (event) => {
|
||||
self.skipWaiting();
|
||||
});
|
||||
|
||||
self.addEventListener('activate', (event) => {
|
||||
event.waitUntil(self.clients.claim());
|
||||
});
|
||||
|
||||
// Behandel klik op een notificatie
|
||||
self.addEventListener('notificationclick', (event) => {
|
||||
event.notification.close();
|
||||
|
||||
const targetUrl = (event.notification.data && event.notification.data.url)
|
||||
? event.notification.data.url
|
||||
: '/planner.php';
|
||||
|
||||
event.waitUntil(
|
||||
clients.matchAll({ type: 'window', includeUncontrolled: true }).then((windowClients) => {
|
||||
// Als er al een Fociz tabblad open staat, breng die naar voren
|
||||
for (let i = 0; i < windowClients.length; i++) {
|
||||
const client = windowClients[i];
|
||||
if ('focus' in client) {
|
||||
if (targetUrl.startsWith('http') && !targetUrl.includes(self.location.host)) {
|
||||
// Externe meeting link (zoals Teams): open in nieuw tabblad
|
||||
if (clients.openWindow) {
|
||||
return clients.openWindow(targetUrl);
|
||||
}
|
||||
} else {
|
||||
client.navigate(targetUrl);
|
||||
return client.focus();
|
||||
}
|
||||
}
|
||||
}
|
||||
// Geen tabblad open: open een nieuw venster
|
||||
if (clients.openWindow) {
|
||||
return clients.openWindow(targetUrl);
|
||||
}
|
||||
})
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user