parsley/app/javascript/lib/ServiceWorker.js
2019-09-13 10:50:28 -05:00

58 lines
1.4 KiB
JavaScript

function trackInstall(worker, cb) {
worker.addEventListener('statechange', function() {
if (worker.state == 'installed') {
cb();
}
});
}
function trackActive(worker, cb) {
worker.addEventListener('statechange', function() {
if (worker.state == 'activated') {
cb();
}
});
}
export function swUpdate() {
navigator.serviceWorker.getRegistration().then(reg => {
if (reg && reg.waiting) {
trackActive(reg.waiting, () => window.location.reload(true));
reg.waiting.postMessage("skipWaiting");
} else {
window.location.reload(true);
}
});
}
export function swInit(store) {
const updateReady = () => store.commit("setUpdateAvailable", true);
const clearUpdateReady = () => store.commit("setUpdateAvailable", false);
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js')
.then(function (reg) {
console.log('Registration succeeded. Scope is ' + reg.scope);
if (reg.waiting) {
console.log('waiting');
updateReady();
trackActive(reg.waiting, clearUpdateReady);
}
reg.addEventListener('updatefound', function () {
if (reg.active) {
trackInstall(reg.installing, updateReady);
}
});
}).catch(function (error) {
console.log('Registration failed with ' + error);
});
}
}