"use client" import { useEffect, useState } from "react" import { Download, Share, SquarePlus, X } from "lucide-react" import { clearDeferredInstallPrompt, getDeferredInstallPrompt, subscribeInstallPrompt, type BeforeInstallPromptEvent, } from "@/lib/pwa-install" const DISMISS_KEY = "teecup-install-dismissed-until" const DISMISS_COOLDOWN_DAYS = 14 function isStandalone() { if (typeof window === "undefined") return false const nav = window.navigator as Navigator & { standalone?: boolean } return window.matchMedia("(display-mode: standalone)").matches || nav.standalone === true } function isIOS() { if (typeof window === "undefined") return false return /iphone|ipad|ipod/i.test(window.navigator.userAgent) } function isDismissedForNow() { if (typeof window === "undefined") return true const raw = window.localStorage.getItem(DISMISS_KEY) if (!raw) return false const until = Number(raw) return Number.isFinite(until) && Date.now() < until } function dismissForNow() { const until = Date.now() + DISMISS_COOLDOWN_DAYS * 24 * 60 * 60 * 1000 window.localStorage.setItem(DISMISS_KEY, String(until)) } // PWA-installasjonsoppfordring (FEATURE_BACKLOG.md "PWA-installasjon"). // To distinkte varianter -- INGEN visning for andre nettlesere uten en // reell installasjonsvei: // - Android/Chrome-familien: ekte "Installer"-knapp via det fangede // beforeinstallprompt-eventet (lib/pwa-install.ts). // - iOS Safari: Apple har ALDRI implementert beforeinstallprompt -- kun et // instruksjonsbanner (Del-ikon -> "Legg til på Hjemskjerm") er mulig. export function InstallPrompt() { const [dismissed, setDismissed] = useState(true) const [platform, setPlatform] = useState<"android" | "ios" | "none">("none") const [deferredEvent, setDeferredEvent] = useState(null) useEffect(() => { if (isStandalone() || isDismissedForNow()) return if (isIOS()) { setPlatform("ios") setDismissed(false) return } // Android/Chrome-familien: vis kun når/hvis eventet faktisk fyres -- // andre nettlesere uten en reell installasjonsvei skal ikke vise noe. const existing = getDeferredInstallPrompt() if (existing) { setDeferredEvent(existing) setPlatform("android") setDismissed(false) } const unsubscribe = subscribeInstallPrompt((event) => { if (event) { setDeferredEvent(event) setPlatform("android") setDismissed(false) } }) return unsubscribe }, []) if (dismissed || platform === "none") return null async function handleInstall() { if (!deferredEvent) return await deferredEvent.prompt() await deferredEvent.userChoice clearDeferredInstallPrompt() setDismissed(true) } function handleDismiss() { dismissForNow() setDismissed(true) } return (
{platform === "ios" ? (

Legg TeeCup til på hjemskjermen

{platform === "ios" ? (

Trykk

) : (

Rask tilgang, fungerer som en egen app, og virker delvis uten nett.

)}
{platform === "android" && ( )}
) }