// Detección y disparo del prompt de instalación (PWA). import { useEffect, useState } from "react"; type PromptEvent = Event & { prompt: () => Promise; userChoice?: Promise }; let guardado: PromptEvent | null = null; export function useInstalarPWA() { const [disponible, setDisponible] = useState(false); const [instalada, setInstalada] = useState(false); useEffect(() => { setDisponible(Boolean(guardado)); setInstalada(window.matchMedia("(display-mode: standalone)").matches); const onPrompt = (e: Event) => { e.preventDefault(); guardado = e as PromptEvent; setDisponible(true); }; const onInstalada = () => { guardado = null; setDisponible(false); setInstalada(true); }; window.addEventListener("beforeinstallprompt", onPrompt); window.addEventListener("appinstalled", onInstalada); return () => { window.removeEventListener("beforeinstallprompt", onPrompt); window.removeEventListener("appinstalled", onInstalada); }; }, []); const instalar = async () => { if (!guardado) return false; await guardado.prompt(); guardado = null; setDisponible(false); return true; }; return { disponible, instalada, instalar }; }