Files
newsnow/src/hooks/usePWA.ts
T

43 lines
1.1 KiB
TypeScript

import { useRegisterSW } from "virtual:pwa-register/react"
import { useMount } from "react-use"
import { useToast } from "./useToast"
export function usePWA() {
const toaster = useToast()
const { updateServiceWorker, needRefresh: [needRefresh] } = useRegisterSW()
useMount(async () => {
const update = () => {
updateServiceWorker().then(() => localStorage.setItem("updated", "1"))
}
await delay(1000)
if (localStorage.getItem("updated")) {
localStorage.removeItem("updated")
toaster("更新成功,赶快体验吧", {
action: {
label: "查看更新",
onClick: () => {
window.open(`${Homepage}/releases/tag/v${Version}`)
},
},
})
} else if (needRefresh) {
if (!navigator) return
if ("connection" in navigator && !navigator.onLine) return
const resp = await myFetch("/latest")
if (resp.v && resp.v !== Version) {
toaster("有更新,5 秒后自动更新", {
action: {
label: "立刻更新",
onClick: update,
},
onDismiss: update,
})
}
}
})
}