next-pwa-pack
Version:
PWA cache provider for Next.js/React apps (service worker, manifest, offline page, SPA cache, offline)
1 lines • 780 B
JavaScript
import{useEffect,useState}from"react";export function usePWAStatus(){const[e,t]=useState(!0),[n,i]=useState(!1),[r,o]=useState(!1);return useEffect((()=>{t(navigator.onLine);const e=()=>t(!0),n=()=>t(!1);return window.addEventListener("online",e),window.addEventListener("offline",n),()=>{window.removeEventListener("online",e),window.removeEventListener("offline",n)}}),[]),useEffect((()=>{"serviceWorker"in navigator&&(navigator.serviceWorker.getRegistration().then((e=>{e&&o(!0),e&&e.waiting&&i(!0)})),navigator.serviceWorker.addEventListener("controllerchange",(()=>{i(!1)})))}),[]),{online:e,hasUpdate:n,swInstalled:r,update:()=>{"serviceWorker"in navigator&&navigator.serviceWorker.getRegistration().then((e=>{e&&e.waiting&&e.waiting.postMessage({type:"SKIP_WAITING"})}))}}}