retry voor web push
Some checks failed
linter / quality (push) Failing after 1m7s
tests / ci (8.3) (push) Failing after 50s
tests / ci (8.4) (push) Failing after 1m6s
tests / ci (8.5) (push) Failing after 1m6s

This commit is contained in:
Daan Meijer 2026-06-21 23:45:50 +02:00
parent bcf583866a
commit 5ad018ed6e
2 changed files with 60 additions and 22 deletions

38
public/sw.js Normal file
View File

@ -0,0 +1,38 @@
self.addEventListener('push', function (event) {
let data = {};
try {
data = event.data?.json() ?? {};
} catch (e) {
data = { title: 'Notification', body: event.data?.text() ?? '' };
}
event.waitUntil(
self.registration.showNotification(data.title, {
body: data.body,
icon: data.icon,
badge: data.badge,
data: data.data,
actions: data.actions,
}),
);
});
self.addEventListener('notificationclick', function (event) {
event.notification.close();
const url = event.notification.data?.url ?? '/';
event.waitUntil(
self.clients
.matchAll({ type: 'window', includeUncontrolled: true })
.then(function (clientList) {
for (const client of clientList) {
if (client.url === url && 'focus' in client) {
return client.focus();
}
}
return self.clients.openWindow(url);
}),
);
});

View File

@ -35,27 +35,27 @@ export default defineConfig({
wayfinder({ wayfinder({
formVariants: true, formVariants: true,
}), }),
VitePWA({ // VitePWA({
registerType: 'autoUpdate', // registerType: 'autoUpdate',
injectRegister: 'auto', // injectRegister: 'auto',
workbox: { // workbox: {
globPatterns: ['**/*.{js,css,html,ico,png,svg}'], // globPatterns: ['**/*.{js,css,html,ico,png,svg}'],
runtimeCaching: [ // runtimeCaching: [
{ // {
urlPattern: ({ url }) => url.pathname.startsWith('/'), // urlPattern: ({ url }) => url.pathname.startsWith('/'),
handler: 'NetworkFirst', // handler: 'NetworkFirst',
options: { // options: {
cacheName: 'api-cache', // cacheName: 'api-cache',
cacheableResponse: { // cacheableResponse: {
statuses: [0, 200], // statuses: [0, 200],
}, // },
}, // },
}, // },
], // ],
}, // },
srcDir: 'resources/js', // srcDir: 'resources/js',
filename: 'sw.js', // filename: 'sw.js',
outDir: 'public', // outDir: 'public',
}), // }),
], ],
}); });