66 lines
1.8 KiB
TypeScript
66 lines
1.8 KiB
TypeScript
/* tslint:disable:no-console */
|
|
|
|
import { register } from 'register-service-worker'
|
|
import notif from './utils/notif'
|
|
|
|
if (process.env.NODE_ENV === 'production') {
|
|
const enableNotif: boolean = false
|
|
let newWorker: any | undefined
|
|
|
|
const reloadLink = document.getElementById('reload-notify-worker')
|
|
if (reloadLink) {
|
|
reloadLink.addEventListener('click', () => {
|
|
if (newWorker) {
|
|
newWorker.postMessage({ action: 'skipWaiting' })
|
|
}
|
|
})
|
|
}
|
|
const showUpdateBar = () => {
|
|
const notify = document.getElementById('notify-worker')
|
|
if (notify) {
|
|
notify.classList.add('show')
|
|
}
|
|
}
|
|
register(`${process.env.BASE_URL}service-worker.js`, {
|
|
registrationOptions: {},
|
|
ready() {
|
|
notif.success('Application mise à jour !')
|
|
console.log('App is being served from cache by a service worker.')
|
|
},
|
|
cached() {
|
|
console.log('Content has been cached for offline use.')
|
|
},
|
|
updatefound(reg) {
|
|
if (enableNotif) {
|
|
console.log('New content found;')
|
|
newWorker = reg.installing
|
|
|
|
newWorker.addEventListener('statechange', () => {
|
|
// Has network.state changed?
|
|
switch (newWorker.state) {
|
|
case 'installed':
|
|
if (navigator.serviceWorker.controller) {
|
|
// new update available
|
|
showUpdateBar()
|
|
}
|
|
// No update available
|
|
break
|
|
}
|
|
})
|
|
}
|
|
},
|
|
updated() {
|
|
console.log('New content is available; please refresh.')
|
|
location.reload(true)
|
|
},
|
|
offline() {
|
|
console.log(
|
|
'No internet connection found. App is running in offline mode.'
|
|
)
|
|
},
|
|
error(error) {
|
|
console.error('Error during service worker registration:', error)
|
|
}
|
|
})
|
|
}
|