import { useEffect, useState } from "react"; import { X, Download, RotateCcw } from "lucide-react"; interface BeforeInstallPromptEvent extends Event { prompt(): Promise; userChoice: Promise<{ outcome: "accepted" | "dismissed" }>; } interface PWAPromptProps { onInstall?: () => void; } export function PWAInstallPrompt({ onInstall }: PWAPromptProps) { const [deferredPrompt, setDeferredPrompt] = useState(null); const [showPrompt, setShowPrompt] = useState(false); useEffect(() => { const handler = (e: Event) => { // Prevent the mini-infobar from appearing on mobile e.preventDefault(); setDeferredPrompt(e as BeforeInstallPromptEvent); setShowPrompt(true); }; window.addEventListener("beforeinstallprompt", handler); return () => window.removeEventListener("beforeinstallprompt", handler); }, []); const handleInstall = async () => { if (!deferredPrompt) return; try { await deferredPrompt.prompt(); const { outcome } = await deferredPrompt.userChoice; if (outcome === "accepted") { onInstall?.(); } setDeferredPrompt(null); setShowPrompt(false); } catch (error) { console.error("Error installing PWA:", error); } }; const handleDismiss = () => { setShowPrompt(false); setDeferredPrompt(null); }; if (!showPrompt || !deferredPrompt) return null; return (

Install Leggen

Add to your home screen for quick access

); } interface PWAUpdatePromptProps { updateAvailable: boolean; onUpdate: () => void; } export function PWAUpdatePrompt({ updateAvailable, onUpdate, }: PWAUpdatePromptProps) { const [showPrompt, setShowPrompt] = useState(false); useEffect(() => { if (updateAvailable) { setShowPrompt(true); } }, [updateAvailable]); const handleUpdate = () => { onUpdate(); setShowPrompt(false); }; const handleDismiss = () => { setShowPrompt(false); }; if (!showPrompt || !updateAvailable) return null; return (

Update Available

A new version of Leggen is ready to install

); }