import { useState, useEffect } from 'react' const DISMISSED_KEY = 'pwa_install_dismissed' /** * PWA install prompt banner (fixed bottom). * Appears when the browser fires `beforeinstallprompt`; hidden once dismissed or installed. * * @example * */ export default function InstallPrompt() { const [prompt, setPrompt] = useState(null) const [visible, setVisible] = useState(false) useEffect(() => { if (localStorage.getItem(DISMISSED_KEY)) return const handler = e => { e.preventDefault() setPrompt(e) setVisible(true) } window.addEventListener('beforeinstallprompt', handler) return () => window.removeEventListener('beforeinstallprompt', handler) }, []) function dismiss() { setVisible(false) localStorage.setItem(DISMISSED_KEY, '1') } async function install() { if (!prompt) return prompt.prompt() const { outcome } = await prompt.userChoice if (outcome === 'accepted') setVisible(false) else dismiss() } if (!visible) return null return (
Thêm vào màn hình chính Trải nghiệm nhanh hơn, offline được
) }