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
)
}