pinafore/src/routes/_utils/serviceWorkerClient.js

29 lines
839 B
JavaScript
Raw Normal View History

import { snackbar } from '../_components/snackbar/snackbar'
2018-01-18 23:37:43 -08:00
async function skipWaiting () {
const reg = await navigator.serviceWorker.getRegistration()
if (!reg || !reg.waiting) {
return
}
reg.waiting.postMessage('skip-waiting')
}
function onUpdateFound (registration) {
const newWorker = registration.installing
2018-01-18 23:37:43 -08:00
newWorker.addEventListener('statechange', async () => {
if (newWorker.state === 'installed' && navigator.serviceWorker.controller) {
snackbar.announce('App update available.', 'Reload', async () => {
await skipWaiting()
document.location.reload(true)
})
}
2018-02-08 22:29:29 -08:00
})
2018-01-18 23:37:43 -08:00
}
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/service-worker.js').then(registration => {
registration.addEventListener('updatefound', () => onUpdateFound(registration))
2018-01-18 23:37:43 -08:00
})
2018-02-08 22:29:29 -08:00
}