import { useState, useEffect } from 'react'; import { Download, Check } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Link } from 'react-router-dom'; import { Tooltip, TooltipContent, TooltipTrigger, } from '@/components/ui/tooltip'; interface BeforeInstallPromptEvent extends Event { prompt: () => Promise; userChoice: Promise<{ outcome: 'accepted' | 'dismissed' }>; } export function InstallButton() { const [deferredPrompt, setDeferredPrompt] = useState(null); const [isInstalled, setIsInstalled] = useState(false); const [isIOS, setIsIOS] = useState(false); useEffect(() => { // Check if already installed if (window.matchMedia('(display-mode: standalone)').matches) { setIsInstalled(true); return; } // Check if iOS setIsIOS(/iPad|iPhone|iPod/.test(navigator.userAgent)); // Listen for install prompt const handler = (e: Event) => { e.preventDefault(); setDeferredPrompt(e as BeforeInstallPromptEvent); }; window.addEventListener('beforeinstallprompt', handler); // Listen for successful install window.addEventListener('appinstalled', () => setIsInstalled(true)); return () => { window.removeEventListener('beforeinstallprompt', handler); }; }, []); const handleInstall = async () => { if (!deferredPrompt) return; await deferredPrompt.prompt(); const { outcome } = await deferredPrompt.userChoice; if (outcome === 'accepted') { setIsInstalled(true); } setDeferredPrompt(null); }; // Already installed - show check mark if (isInstalled) { return (

App installeret

); } // Can prompt directly (Chrome/Edge) if (deferredPrompt) { return (

Installer app

); } // iOS or other - link to install page return (

{isIOS ? 'Installer på iPhone' : 'Installer app'}

); }