'use client'; import { useEffect, useState } from 'react'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import X from 'lucide-react/dist/esm/icons/x'; import Download from 'lucide-react/dist/esm/icons/download'; import Smartphone from 'lucide-react/dist/esm/icons/smartphone'; type BeforeInstallPromptEvent = Event & { prompt(): Promise; userChoice: Promise<{ outcome: 'accepted' | 'dismissed' }>; }; export function PWADownloadPrompt() { const [deferredPrompt, setDeferredPrompt] = useState(null); const [showPrompt, setShowPrompt] = useState(false); useEffect(() => { if ('serviceWorker' in navigator) { void navigator.serviceWorker.register('/service-worker.js'); } const onBeforeInstall = (e: Event) => { e.preventDefault(); setDeferredPrompt(e as BeforeInstallPromptEvent); setShowPrompt(true); }; const onInstalled = () => { setShowPrompt(false); setDeferredPrompt(null); }; window.addEventListener('beforeinstallprompt', onBeforeInstall); window.addEventListener('appinstalled', onInstalled); return () => { window.removeEventListener('beforeinstallprompt', onBeforeInstall); window.removeEventListener('appinstalled', onInstalled); }; }, []); if (!showPrompt || !deferredPrompt) return null; return (
Install App

Install this app for offline access and a faster experience.

); }