From 5fa6131e541d17c1b90c07d0a3c9a9914d0224e3 Mon Sep 17 00:00:00 2001 From: Tajim Date: Fri, 28 Aug 2026 14:31:26 +0600 Subject: [PATCH 1/4] feat(pwa): modernize PWA install prompt design and integrate into Global Chat --- resources/js/components/PwaInstallPrompt.vue | 206 +++++++++++++++---- resources/js/pages/Chat/Index.vue | 4 + 2 files changed, 169 insertions(+), 41 deletions(-) diff --git a/resources/js/components/PwaInstallPrompt.vue b/resources/js/components/PwaInstallPrompt.vue index 9e74ba0..4aecada 100644 --- a/resources/js/components/PwaInstallPrompt.vue +++ b/resources/js/components/PwaInstallPrompt.vue @@ -1,4 +1,5 @@ diff --git a/resources/js/lib/usePwa.ts b/resources/js/lib/usePwa.ts index b7fab46..b3b333a 100644 --- a/resources/js/lib/usePwa.ts +++ b/resources/js/lib/usePwa.ts @@ -6,7 +6,10 @@ const isInstalled = ref(false); let isInitialized = false; export function initPwa() { - if (typeof window === 'undefined' || isInitialized) return; + if (typeof window === 'undefined' || isInitialized) { + return; + } + isInitialized = true; const checkStandalone = () => { @@ -35,18 +38,24 @@ export function usePwa() { } const promptInstall = async (): Promise => { - if (!deferredPrompt.value) return false; + if (!deferredPrompt.value) { + return false; + } + try { await deferredPrompt.value.prompt(); const { outcome } = await deferredPrompt.value.userChoice; + if (outcome === 'accepted') { isInstalled.value = true; deferredPrompt.value = null; + return true; } } catch (err) { console.error('PWA install error:', err); } + return false; };