Simplification complète de l'app - Suppression admin/WiFi/bungalow
- Suppression de toute la partie admin (routes, composants, API) - Suppression du WiFi et du numéro de bungalow - Simplification de l'accueil (logo, météo, message statique) - App 100% statique maintenant - Redirection simple vers /accueil - Nettoyage des hooks et types inutilisés
This commit is contained in:
14
deploy/public/ICONS_README.md
Normal file
14
deploy/public/ICONS_README.md
Normal file
@ -0,0 +1,14 @@
|
||||
# Icônes PWA requises
|
||||
|
||||
Pour que la PWA fonctionne correctement, vous devez ajouter les icônes suivantes dans le dossier `public/` :
|
||||
|
||||
- `icon-192x192.png` : Icône 192x192 pixels pour Android
|
||||
- `icon-512x512.png` : Icône 512x512 pixels pour Android et iOS
|
||||
|
||||
Ces icônes doivent être au format PNG et suivre les guidelines PWA :
|
||||
- Fond transparent ou couleur de thème (#0E7490)
|
||||
- Design simple et reconnaissable même à petite taille
|
||||
- Format carré avec contenu centré
|
||||
|
||||
Vous pouvez utiliser un outil comme [PWA Asset Generator](https://github.com/onderceylan/pwa-asset-generator) pour générer toutes les tailles nécessaires à partir d'une seule image source.
|
||||
|
||||
29
deploy/public/LOGO_README.md
Normal file
29
deploy/public/LOGO_README.md
Normal file
@ -0,0 +1,29 @@
|
||||
# Logo Relais Marama
|
||||
|
||||
Le logo est maintenant intégré en format **SVG** (vectoriel), ce qui est idéal car :
|
||||
- ✅ S'adapte à toutes les tailles sans perte de qualité
|
||||
- ✅ Fichier léger
|
||||
- ✅ Net sur tous les écrans (y compris Retina)
|
||||
- ✅ Supporte la transparence
|
||||
|
||||
## Fichier actuel
|
||||
|
||||
**`logo-relais-marama.svg`** - Logo vectoriel Relais Marama
|
||||
|
||||
## Formats alternatifs (si besoin)
|
||||
|
||||
Si vous souhaitez utiliser un autre format, vous pouvez :
|
||||
- **PNG** : `logo-relais-marama.png` (avec transparence, 512x512px minimum)
|
||||
- **WebP** : `logo-relais-marama.webp` (format moderne optimisé)
|
||||
|
||||
## Emplacements où le logo apparaîtra
|
||||
|
||||
1. **Page d'accueil** : En haut, centré, avant le message de bienvenue
|
||||
2. **Favicon** : Peut être utilisé comme icône de l'application (optionnel)
|
||||
|
||||
## Note
|
||||
|
||||
Si vous souhaitez utiliser le logo comme favicon, vous pouvez également :
|
||||
- Créer une version 32x32 pixels nommée `favicon.ico`
|
||||
- Ou mettre à jour le lien dans `app/layout.tsx` pour pointer vers `/logo-relais-marama.png`
|
||||
|
||||
30
deploy/public/data/excursions.json
Normal file
30
deploy/public/data/excursions.json
Normal file
@ -0,0 +1,30 @@
|
||||
[
|
||||
{
|
||||
"id": "1",
|
||||
"name": "Tour du Lagon de Fakarava",
|
||||
"type": "tour-lagon",
|
||||
"description": "Découvrez les merveilles du lagon de Fakarava avec arrêts snorkeling aux raies et requins.",
|
||||
"duration": "4 heures",
|
||||
"price": 12000,
|
||||
"available": true
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"name": "Plongée à la Passe Sud (Tumakohua)",
|
||||
"type": "plongee",
|
||||
"description": "Expérience unique de plongée à la célèbre Passe Sud de Fakarava avec les majestueuses raies mantas et requins.",
|
||||
"duration": "3 heures",
|
||||
"price": 15000,
|
||||
"available": true
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"name": "Excursion en vélo vers le Sud",
|
||||
"type": "4x4",
|
||||
"description": "Explorez la route principale de Fakarava vers le sud en vélo, découvrez des plages isolées et la nature luxuriante.",
|
||||
"duration": "3 heures",
|
||||
"price": 8000,
|
||||
"available": true
|
||||
}
|
||||
]
|
||||
|
||||
72
deploy/public/data/infos.json
Normal file
72
deploy/public/data/infos.json
Normal file
@ -0,0 +1,72 @@
|
||||
{
|
||||
"faq": [
|
||||
{
|
||||
"id": "pension-1",
|
||||
"question": "Heures de Check-out",
|
||||
"answer": "Le check-out se fait avant 11h00. Merci de libérer votre bungalow à l'heure prévue pour permettre la préparation pour les prochains clients.",
|
||||
"category": "Pension",
|
||||
"icon": "🏠"
|
||||
},
|
||||
{
|
||||
"id": "pension-2",
|
||||
"question": "Petit-déjeuner",
|
||||
"answer": "Le petit-déjeuner est servi de 7h30 à 9h30 dans la salle commune. Il comprend des fruits frais, du pain, des confitures locales et des boissons chaudes.",
|
||||
"category": "Pension",
|
||||
"icon": "🍽️"
|
||||
},
|
||||
{
|
||||
"id": "urgence-1",
|
||||
"question": "Numéros d'urgence",
|
||||
"answer": "Médecin : +689 40 98 41 24 | Gérant : +689 XX XX XX XX | Urgences : 15",
|
||||
"category": "Urgence",
|
||||
"icon": "🚨"
|
||||
},
|
||||
{
|
||||
"id": "pratique-1",
|
||||
"question": "Location de vélos",
|
||||
"answer": "Des vélos sont disponibles à la location pour explorer l'île. Pensez à réserver à l'avance. Prix : 1500 XPF/jour.",
|
||||
"category": "Pratique",
|
||||
"icon": "🚲"
|
||||
},
|
||||
{
|
||||
"id": "pratique-2",
|
||||
"question": "Où faire ses courses ?",
|
||||
"answer": "Le Magasin Rotoava est l'épicerie principale (ouvert de 7h à 11h30 et 15h à 17h30). Prévoyez vos courses car les horaires sont limités.",
|
||||
"category": "Pratique",
|
||||
"icon": "🛒"
|
||||
}
|
||||
],
|
||||
"lexique": [
|
||||
{
|
||||
"id": "lex-1",
|
||||
"mot": "Ia Ora Na",
|
||||
"traduction": "Bonjour / Bienvenue",
|
||||
"description": "Le salut polynésien par excellence. À utiliser à toute heure de la journée."
|
||||
},
|
||||
{
|
||||
"id": "lex-2",
|
||||
"mot": "Māuruuru",
|
||||
"traduction": "Merci",
|
||||
"description": "Pour exprimer votre gratitude. Très apprécié des locaux !"
|
||||
},
|
||||
{
|
||||
"id": "lex-3",
|
||||
"mot": "Nānā",
|
||||
"traduction": "Au revoir",
|
||||
"description": "Pour dire au revoir. Peut aussi se dire 'Parahi'."
|
||||
},
|
||||
{
|
||||
"id": "lex-4",
|
||||
"mot": "Mana",
|
||||
"traduction": "Énergie spirituelle / Force",
|
||||
"description": "Concept polynésien désignant la force vitale et spirituelle qui habite chaque être et chaque lieu."
|
||||
},
|
||||
{
|
||||
"id": "lex-5",
|
||||
"mot": "Poti Marara",
|
||||
"traduction": "Poisson volant",
|
||||
"description": "Un des plats traditionnels de Fakarava, souvent servi cru avec du lait de coco."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
19
deploy/public/data/notifications.json
Normal file
19
deploy/public/data/notifications.json
Normal file
@ -0,0 +1,19 @@
|
||||
[
|
||||
{
|
||||
"id": "notif-1",
|
||||
"title": "Baleines au Nord !",
|
||||
"message": "Des baleines à bosse ont été aperçues au nord de l'île ce matin. Une belle occasion pour une sortie !",
|
||||
"type": "whale",
|
||||
"timestamp": "2025-11-23T08:30:00Z",
|
||||
"read": false
|
||||
},
|
||||
{
|
||||
"id": "notif-2",
|
||||
"title": "Météo favorable",
|
||||
"message": "Mer calme prévue pour les 3 prochains jours. Parfait pour le snorkeling et les excursions lagon !",
|
||||
"type": "weather",
|
||||
"timestamp": "2025-11-22T18:00:00Z",
|
||||
"read": false
|
||||
}
|
||||
]
|
||||
|
||||
166
deploy/public/data/places.json
Normal file
166
deploy/public/data/places.json
Normal file
@ -0,0 +1,166 @@
|
||||
[
|
||||
{
|
||||
"id": "fakarava-1",
|
||||
"name": "Snack du Requin Dormeur",
|
||||
"category": "restaurants",
|
||||
"type": "Snack / Plage",
|
||||
"description": "LE lieu pour déjeuner les pieds dans l'eau. Poisson cru légendaire. Le cadre est inoubliable.",
|
||||
"keywords": ["Lagon", "Poisson Cru", "Ambiance", "Incontournable"],
|
||||
"contact": "+689 40 93 40 15",
|
||||
"image": "/placeholder-restaurant.jpg",
|
||||
"location": {
|
||||
"lat": -16.3167,
|
||||
"lng": -145.6167,
|
||||
"address": "PK 2, Rotoava"
|
||||
},
|
||||
"gmapLink": "https://www.google.com/maps/search/?api=1&query=Snack+du+Requin+Dormeur+Fakarava"
|
||||
},
|
||||
{
|
||||
"id": "fakarava-2",
|
||||
"name": "Snack Kori Kori",
|
||||
"category": "restaurants",
|
||||
"type": "Snack / Déjeuner",
|
||||
"description": "Super vue sur le lagon, parfait pour un déjeuner simple et bon. Leur Fish Burger est très apprécié.",
|
||||
"keywords": ["Décontracté", "Vue", "Fish Burger", "Poisson Grillé"],
|
||||
"contact": "+689 40 98 43 97",
|
||||
"image": "/placeholder-restaurant.jpg",
|
||||
"location": {
|
||||
"lat": -16.3177,
|
||||
"lng": -145.6177,
|
||||
"address": "PK 4, Rotoava"
|
||||
},
|
||||
"gmapLink": "https://www.google.com/maps/search/?api=1&query=Snack+Kori+Kori+Fakarava"
|
||||
},
|
||||
{
|
||||
"id": "fakarava-3",
|
||||
"name": "Plage du PK 9 (Cocotier Couché)",
|
||||
"category": "plages",
|
||||
"type": "Plage",
|
||||
"description": "La plage la plus photogénique du Nord de Fakarava. Vous y trouverez le célèbre cocotier penché, parfait pour une photo \"carte postale\". Idéal pour le farniente et la baignade tranquille.",
|
||||
"keywords": ["Photogénique", "Cocotier", "Baignade", "Farniente"],
|
||||
"image": "/placeholder-beach.jpg",
|
||||
"location": {
|
||||
"lat": -16.3187,
|
||||
"lng": -145.6187,
|
||||
"address": "PK 9, Rotoava"
|
||||
},
|
||||
"gmapLink": "https://www.google.com/maps/search/?api=1&query=PK+9+Fakarava",
|
||||
"conseil": "Accessible à vélo (environ 9 km depuis Rotoava). Prévoyez de l'eau car elle est isolée."
|
||||
},
|
||||
{
|
||||
"id": "fakarava-4",
|
||||
"name": "L'Ancien Phare de Topaka",
|
||||
"category": "plages",
|
||||
"type": "Point de vue",
|
||||
"description": "Un peu plus loin après le PK 9, le phare n'est pas une plage en soi, mais le lieu offre une vue unique sur l'Océan Pacifique (côté \"océan\" et non lagon). Ambiance de \"bout du monde\".",
|
||||
"keywords": ["Phare", "Vue panoramique", "Océan", "Point de vue"],
|
||||
"image": "/placeholder-beach.jpg",
|
||||
"location": {
|
||||
"lat": -16.3197,
|
||||
"lng": -145.6197,
|
||||
"address": "Après le PK 9, Rotoava"
|
||||
},
|
||||
"gmapLink": "https://www.google.com/maps/search/?api=1&query=Phare+Topaka+Fakarava",
|
||||
"conseil": "S'y rendre à vélo pour une belle balade (non recommandé pour la baignade)."
|
||||
},
|
||||
{
|
||||
"id": "fakarava-5",
|
||||
"name": "La Passe Nord (Garuae)",
|
||||
"category": "plages",
|
||||
"type": "Spot de snorkeling",
|
||||
"description": "L'une des plus grandes passes de Polynésie. On n'y va pas pour la plage, mais pour l'activité de snorkeling en dérivante qui y est spectaculaire (à faire avec un club). Le paysage est impressionnant.",
|
||||
"keywords": ["Passe", "Snorkeling", "Dérivante", "Spectaculaire"],
|
||||
"image": "/placeholder-beach.jpg",
|
||||
"location": {
|
||||
"lat": -16.3207,
|
||||
"lng": -145.6207,
|
||||
"address": "Passe Nord, Fakarava"
|
||||
},
|
||||
"gmapLink": "https://www.google.com/maps/search/?api=1&query=Passe+Nord+Garuae+Fakarava",
|
||||
"conseil": "Zone très courante, attention si vous nagez seul."
|
||||
},
|
||||
{
|
||||
"id": "fakarava-6",
|
||||
"name": "Les Sables Roses (Passe Sud)",
|
||||
"category": "plages",
|
||||
"type": "Plage exceptionnelle",
|
||||
"description": "L'excursion la plus célèbre de Fakarava. Il s'agit d'une plage unique de sable aux nuances rosées, à la pointe Sud de l'atoll.",
|
||||
"keywords": ["Sable rose", "Exceptionnel", "Passe Sud", "Excursion"],
|
||||
"image": "/placeholder-beach.jpg",
|
||||
"location": {
|
||||
"lat": -16.3217,
|
||||
"lng": -145.6217,
|
||||
"address": "Pointe Sud, Fakarava"
|
||||
},
|
||||
"gmapLink": "https://www.google.com/maps/search/?api=1&query=Sables+Roses+Passe+Sud+Fakarava",
|
||||
"conseil": "ATTENTION : Nécessite une excursion bateau à la journée (environ 2 heures de trajet). Coût élevé, à réserver."
|
||||
},
|
||||
{
|
||||
"id": "fakarava-7",
|
||||
"name": "Plage de la Pension (Votre Plage)",
|
||||
"category": "plages",
|
||||
"type": "Plage privée",
|
||||
"description": "N'hésitez pas à mettre en avant votre propre plage et ponton ! Idéal pour un snorkeling facile et sécurisé.",
|
||||
"keywords": ["Plage privée", "Ponton", "Snorkeling", "Sécurisé"],
|
||||
"image": "/placeholder-beach.jpg",
|
||||
"location": {
|
||||
"lat": -16.3227,
|
||||
"lng": -145.6227,
|
||||
"address": "Pension Marama, Rotoava"
|
||||
},
|
||||
"gmapLink": "https://www.google.com/maps/search/?api=1&query=Pension+Marama+Fakarava",
|
||||
"conseil": "Parfait pour la baignade et le snorkeling en toute tranquillité, juste devant votre bungalow."
|
||||
},
|
||||
{
|
||||
"id": "fakarava-8",
|
||||
"name": "Magasin Rotoava",
|
||||
"category": "epiceries",
|
||||
"type": "Épicerie principale",
|
||||
"description": "L'épicerie principale du village, idéale pour le ravitaillement. Bien achalandée avec les produits essentiels.",
|
||||
"keywords": ["Épicerie", "Ravitaillement", "Village", "Principal"],
|
||||
"image": "/placeholder-store.jpg",
|
||||
"location": {
|
||||
"lat": -16.3237,
|
||||
"lng": -145.6237,
|
||||
"address": "Cœur du village de Rotoava"
|
||||
},
|
||||
"gmapLink": "https://www.google.com/maps/search/?api=1&query=Magasin+Rotoava+Fakarava",
|
||||
"horaires": "Lundi au Samedi : 7h00 - 11h30 et 15h00 - 17h30. (Fermé les jours fériés.)",
|
||||
"conseil": "Idéal pour le ravitaillement principal. Pensez à y aller avant midi !"
|
||||
},
|
||||
{
|
||||
"id": "fakarava-9",
|
||||
"name": "Snack Chez Elda",
|
||||
"category": "epiceries",
|
||||
"type": "Snack / Dépannage",
|
||||
"description": "Souvent mentionné pour sa cuisine, il est aussi un point de vente pour quelques nécessités.",
|
||||
"keywords": ["Snack", "Dépannage", "Cuisine", "Nécessités"],
|
||||
"image": "/placeholder-store.jpg",
|
||||
"location": {
|
||||
"lat": -16.3247,
|
||||
"lng": -145.6247,
|
||||
"address": "Rotoava"
|
||||
},
|
||||
"gmapLink": "https://www.google.com/maps/search/?api=1&query=Snack+Chez+Elda+Fakarava",
|
||||
"horaires": "Horaires variables.",
|
||||
"conseil": "Peut dépanner en cas de besoin en dehors des heures de pointe."
|
||||
},
|
||||
{
|
||||
"id": "fakarava-10",
|
||||
"name": "Autres Petites Épiceries",
|
||||
"category": "epiceries",
|
||||
"type": "Épiceries locales",
|
||||
"description": "Les autres magasins sont plus petits et moins achalandés, mais pratiques si vous êtes loin du centre.",
|
||||
"keywords": ["Petites épiceries", "Locales", "Dépannage"],
|
||||
"image": "/placeholder-store.jpg",
|
||||
"location": {
|
||||
"lat": -16.3257,
|
||||
"lng": -145.6257,
|
||||
"address": "Le long de la route principale"
|
||||
},
|
||||
"gmapLink": "https://www.google.com/maps/search/?api=1&query=Epiceries+Fakarava",
|
||||
"horaires": "Variables, souvent ouvertes tôt le matin.",
|
||||
"conseil": "Les autres magasins sont plus petits et moins achalandés, mais pratiques si vous êtes loin du centre."
|
||||
}
|
||||
]
|
||||
|
||||
18
deploy/public/data/sun-times.json
Normal file
18
deploy/public/data/sun-times.json
Normal file
@ -0,0 +1,18 @@
|
||||
[
|
||||
{
|
||||
"date": "2025-11-23",
|
||||
"sunrise": "05:42",
|
||||
"sunset": "18:23"
|
||||
},
|
||||
{
|
||||
"date": "2025-11-24",
|
||||
"sunrise": "05:43",
|
||||
"sunset": "18:24"
|
||||
},
|
||||
{
|
||||
"date": "2025-11-25",
|
||||
"sunrise": "05:43",
|
||||
"sunset": "18:24"
|
||||
}
|
||||
]
|
||||
|
||||
36
deploy/public/data/tides.json
Normal file
36
deploy/public/data/tides.json
Normal file
@ -0,0 +1,36 @@
|
||||
[
|
||||
{
|
||||
"date": "2025-11-23",
|
||||
"highTide": {
|
||||
"time": "06:45",
|
||||
"height": 1.2
|
||||
},
|
||||
"lowTide": {
|
||||
"time": "12:30",
|
||||
"height": 0.3
|
||||
}
|
||||
},
|
||||
{
|
||||
"date": "2025-11-24",
|
||||
"highTide": {
|
||||
"time": "07:15",
|
||||
"height": 1.3
|
||||
},
|
||||
"lowTide": {
|
||||
"time": "13:00",
|
||||
"height": 0.2
|
||||
}
|
||||
},
|
||||
{
|
||||
"date": "2025-11-25",
|
||||
"highTide": {
|
||||
"time": "07:45",
|
||||
"height": 1.4
|
||||
},
|
||||
"lowTide": {
|
||||
"time": "13:30",
|
||||
"height": 0.4
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
1
deploy/public/favicon.ico
Normal file
1
deploy/public/favicon.ico
Normal file
@ -0,0 +1 @@
|
||||
placeholder
|
||||
50
deploy/public/logo-relais-marama.svg
Normal file
50
deploy/public/logo-relais-marama.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 19 KiB |
25
deploy/public/manifest.json
Normal file
25
deploy/public/manifest.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": "Compagnon du lagon - Pension Marama",
|
||||
"short_name": "Pension Marama",
|
||||
"description": "Votre guide numérique pour votre séjour à Fakarava",
|
||||
"start_url": "/",
|
||||
"display": "standalone",
|
||||
"background_color": "#FAFAFA",
|
||||
"theme_color": "#0E7490",
|
||||
"orientation": "portrait",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/icon-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "any maskable"
|
||||
},
|
||||
{
|
||||
"src": "/icon-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "any maskable"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
147
deploy/public/sw.js
Normal file
147
deploy/public/sw.js
Normal file
@ -0,0 +1,147 @@
|
||||
const CACHE_NAME = "compagnon-lagon-v1";
|
||||
const urlsToCache = [
|
||||
"/",
|
||||
"/accueil",
|
||||
"/explorer",
|
||||
"/mana-tracker",
|
||||
"/infos",
|
||||
"/manifest.json",
|
||||
];
|
||||
|
||||
const API_CACHE_NAME = "compagnon-lagon-api-v1";
|
||||
|
||||
self.addEventListener("install", (event) => {
|
||||
event.waitUntil(
|
||||
caches.open(CACHE_NAME).then((cache) => {
|
||||
return cache.addAll(urlsToCache);
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
self.addEventListener("fetch", (event) => {
|
||||
const { request } = event;
|
||||
const url = new URL(request.url);
|
||||
|
||||
// Cache strategy pour les API routes
|
||||
if (url.pathname.startsWith("/api/")) {
|
||||
event.respondWith(
|
||||
caches.open(API_CACHE_NAME).then((cache) => {
|
||||
return cache.match(request).then((cachedResponse) => {
|
||||
if (cachedResponse) {
|
||||
// Retourner le cache et mettre à jour en arrière-plan
|
||||
fetch(request)
|
||||
.then((response) => {
|
||||
if (response && response.status === 200) {
|
||||
cache.put(request, response.clone());
|
||||
}
|
||||
})
|
||||
.catch(() => {});
|
||||
return cachedResponse;
|
||||
}
|
||||
// Pas de cache, faire la requête
|
||||
return fetch(request)
|
||||
.then((response) => {
|
||||
if (response && response.status === 200) {
|
||||
cache.put(request, response.clone());
|
||||
}
|
||||
return response;
|
||||
})
|
||||
.catch(() => {
|
||||
// En cas d'erreur réseau, retourner une réponse par défaut
|
||||
return new Response(
|
||||
JSON.stringify({ error: "Offline" }),
|
||||
{
|
||||
status: 503,
|
||||
headers: { "Content-Type": "application/json" },
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
})
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// Cache strategy pour les pages statiques
|
||||
event.respondWith(
|
||||
caches.match(request).then((response) => {
|
||||
if (response) {
|
||||
return response;
|
||||
}
|
||||
return fetch(request)
|
||||
.then((response) => {
|
||||
if (!response || response.status !== 200 || response.type !== "basic") {
|
||||
return response;
|
||||
}
|
||||
const responseToCache = response.clone();
|
||||
caches.open(CACHE_NAME).then((cache) => {
|
||||
cache.put(request, responseToCache);
|
||||
});
|
||||
return response;
|
||||
})
|
||||
.catch(() => {
|
||||
// Retourner une page offline si disponible
|
||||
return caches.match("/offline");
|
||||
});
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
self.addEventListener("activate", (event) => {
|
||||
event.waitUntil(
|
||||
caches.keys().then((cacheNames) => {
|
||||
return Promise.all(
|
||||
cacheNames
|
||||
.filter(
|
||||
(cacheName) =>
|
||||
cacheName !== CACHE_NAME && cacheName !== API_CACHE_NAME
|
||||
)
|
||||
.map((cacheName) => caches.delete(cacheName))
|
||||
);
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
// Gestion des notifications push
|
||||
self.addEventListener("push", (event) => {
|
||||
const data = event.data ? event.data.json() : {};
|
||||
const title = data.title || "Compagnon du lagon - Pension Marama";
|
||||
const options = {
|
||||
body: data.message || "Nouvelle notification",
|
||||
icon: "/icon-192x192.png",
|
||||
badge: "/icon-192x192.png",
|
||||
tag: data.id || "notification",
|
||||
requireInteraction: data.important || false,
|
||||
data: data,
|
||||
};
|
||||
|
||||
event.waitUntil(self.registration.showNotification(title, options));
|
||||
});
|
||||
|
||||
// Gestion du clic sur une notification
|
||||
self.addEventListener("notificationclick", (event) => {
|
||||
event.notification.close();
|
||||
|
||||
const data = event.notification.data;
|
||||
const urlToOpen = data.url || "/mana-tracker";
|
||||
|
||||
event.waitUntil(
|
||||
clients
|
||||
.matchAll({
|
||||
type: "window",
|
||||
includeUncontrolled: true,
|
||||
})
|
||||
.then((clientList) => {
|
||||
for (let i = 0; i < clientList.length; i++) {
|
||||
const client = clientList[i];
|
||||
if (client.url === urlToOpen && "focus" in client) {
|
||||
return client.focus();
|
||||
}
|
||||
}
|
||||
if (clients.openWindow) {
|
||||
return clients.openWindow(urlToOpen);
|
||||
}
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user