Files
e-cosplay/public/sw.js
Serreau Jovann 5aaac0aa3b ```
 feat(sw.js): Ajoute la gestion des notifications push et simplifie le SW.
🔧 chore(framework.yaml): Configure les proxies de confiance pour Cloudflare.
```
2025-11-22 21:01:25 +01:00

61 lines
2.1 KiB
JavaScript

// --- Service Worker pour la gestion des Notifications Push ---
// Permet au Service Worker de s'activer immédiatement après l'installation
self.addEventListener("message", (event) => {
if (event.data && event.data.type === "SKIP_WAITING") {
self.skipWaiting();
}
});
// --- GESTION DES NOTIFICATIONS PUSH (Réception) ---
self.addEventListener('push', (event) => {
if (event.data) {
// Le payload JSON envoyé par votre serveur doit contenir
// 'title', 'message' et 'link'.
const data = event.data.json();
const title = data.title || 'Nouvelle Notification';
const message = data.message || 'Contenu mis à jour.';
const link = data.link || '/'; // Lien par défaut vers la racine
const options = {
body: message,
// PATH MIS À JOUR ICI : Assurez-vous que l'icône est accessible
icon: data.icon || '/assets/notif.png',
data: {
link: link // On stocke le lien pour le réutiliser au clic
}
};
// Affiche la notification
event.waitUntil(
self.registration.showNotification(title, options)
);
}
});
// --- GESTION DES CLICS SUR LA NOTIFICATION ---
self.addEventListener('notificationclick', (event) => {
// Récupère le lien stocké dans la notification
const urlToOpen = event.notification.data.link || '/';
// Ferme la notification après le clic
event.notification.close();
// Ouvre l'URL associée, soit dans un onglet existant, soit dans un nouvel onglet
event.waitUntil(
clients.matchAll({ type: 'window', includeUncontrolled: true }).then((clientList) => {
// Tente de trouver un client existant pour naviguer (si l'URL est déjà ouverte)
for (const client of clientList) {
if (client.url.includes(urlToOpen) && 'focus' in client) {
return client.focus();
}
}
// Sinon, ouvre une nouvelle fenêtre/onglet
return clients.openWindow(urlToOpen);
})
);
});