From e32b1ce04e03999f9b8970b407d9f31f19dd7e81 Mon Sep 17 00:00:00 2001
From: EvanChal
Date: Sun, 25 Jan 2026 23:24:25 +0100
Subject: [PATCH] fix(pwa)
---
frontend/src/layouts/DefaultLayout.vue | 71 +++++++++++++++++---------
frontend/src/views/Register.vue | 48 +++++++++++------
2 files changed, 81 insertions(+), 38 deletions(-)
diff --git a/frontend/src/layouts/DefaultLayout.vue b/frontend/src/layouts/DefaultLayout.vue
index 02464e0..215ac7b 100644
--- a/frontend/src/layouts/DefaultLayout.vue
+++ b/frontend/src/layouts/DefaultLayout.vue
@@ -129,9 +129,9 @@
- Voilà, c'est quand même mieux comme ça !
+ Le bouton d'installation apparaîtra automatiquement quand tu seras connecté
@@ -439,33 +439,51 @@ async function handleRegister() {
}
// PWA Installation
+const isMobile = ref(false)
+
+function checkIfMobile() {
+ isMobile.value = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent) ||
+ window.innerWidth < 768
+}
+
function handleBeforeInstallPrompt(e) {
e.preventDefault()
deferredPrompt.value = e
}
async function handleInstallApp() {
- if (!deferredPrompt.value) return
-
- try {
- deferredPrompt.value.prompt()
- const { outcome } = await deferredPrompt.value.userChoice
-
- if (outcome === 'accepted') {
- console.log('✅ PWA installée avec succès')
+ if (deferredPrompt.value) {
+ try {
+ deferredPrompt.value.prompt()
+ const { outcome } = await deferredPrompt.value.userChoice
+
+ if (outcome === 'accepted') {
+ console.log('✅ PWA installée avec succès')
+ }
+
+ deferredPrompt.value = null
+ } catch (error) {
+ console.error('Erreur lors de l\'installation:', error)
+ }
+ } else if (isMobile.value) {
+ // Sur mobile sans beforeinstallprompt, afficher les instructions
+ const isIOS = /iPhone|iPad|iPod/i.test(navigator.userAgent)
+ if (isIOS) {
+ alert('Sur iOS :\n1. Appuyez sur le bouton de partage (□↑) en bas de l\'écran\n2. Faites défiler et sélectionnez "Sur l\'écran d\'accueil"\n3. Appuyez sur "Ajouter"')
+ } else {
+ alert('Sur Android :\n1. Appuyez sur le menu (⋮) en haut à droite\n2. Sélectionnez "Ajouter à l\'écran d\'accueil" ou "Installer l\'application"\n3. Confirmez l\'installation')
}
-
- deferredPrompt.value = null
- } catch (error) {
- console.error('Erreur lors de l\'installation:', error)
}
}
onMounted(() => {
+ checkIfMobile()
window.addEventListener('beforeinstallprompt', handleBeforeInstallPrompt)
+ window.addEventListener('resize', checkIfMobile)
})
onBeforeUnmount(() => {
window.removeEventListener('beforeinstallprompt', handleBeforeInstallPrompt)
+ window.removeEventListener('resize', checkIfMobile)
})