dashy/src/utils/InitServiceWorker.js

95 lines
3.0 KiB
JavaScript
Raw Normal View History

2022-03-06 08:06:05 +00:00
import axios from 'axios';
import yaml from 'js-yaml';
2019-09-01 12:38:13 +00:00
import { register } from 'register-service-worker';
import { sessionStorageKeys } from '@/utils/defaults';
2021-09-12 14:00:10 +00:00
import { statusMsg, statusErrorMsg } from '@/utils/CoolConsole';
2019-07-19 14:07:26 +00:00
/* Sets a local storage item with the state from the SW lifecycle */
const setSwStatus = (swStateToSet) => {
const initialSwState = {
ready: false,
registered: false,
cached: false,
updateFound: false,
updated: false,
offline: false,
error: false,
devMode: false,
disabledByUser: false,
};
const sessionData = sessionStorage[sessionStorageKeys.SW_STATUS];
const currentSwState = sessionData ? JSON.parse(sessionData) : initialSwState;
try {
const newSwState = { ...currentSwState, ...swStateToSet };
sessionStorage.setItem(sessionStorageKeys.SW_STATUS, JSON.stringify(newSwState));
} catch (e) {
2021-09-12 14:00:10 +00:00
statusErrorMsg('Service Worker Status', 'Error Updating SW Status', e);
}
};
/**
* Checks if service workers should be enabled
* Disable if not running in production
* Or disable if user specified to disable
*/
2022-03-06 08:06:05 +00:00
const shouldEnableServiceWorker = async () => {
const conf = yaml.load((await axios.get('conf.yml')).data);
2021-09-12 14:00:10 +00:00
if (conf && conf.appConfig && conf.appConfig.enableServiceWorker) {
setSwStatus({ disabledByUser: false });
return true;
} else if (process.env.NODE_ENV !== 'production') {
setSwStatus({ devMode: true });
2021-09-12 14:00:10 +00:00
return false;
}
2021-09-12 14:00:10 +00:00
setSwStatus({ disabledByUser: true });
return false;
};
2021-09-12 14:00:10 +00:00
/* Calls to the print status function */
const printSwStatus = (msg) => {
statusMsg('Service Worker Status', msg);
};
const swUrl = `${process.env.BASE_URL || '/'}service-worker.js`;
/* If service worker enabled, then register it, and print message when status changes */
2022-03-06 08:06:05 +00:00
const registerServiceWorker = async () => {
if (await shouldEnableServiceWorker()) {
2021-09-12 14:00:10 +00:00
register(swUrl, {
ready() {
setSwStatus({ ready: true });
2021-09-12 14:00:10 +00:00
printSwStatus(
'Dashy is being served from cache by a service worker.\n'
+ 'For more details, visit https://goo.gl/AFskqB',
);
},
registered() {
setSwStatus({ registered: true });
2021-09-12 14:00:10 +00:00
printSwStatus('Service worker has been registered.');
},
cached() {
setSwStatus({ cached: true });
2021-09-12 14:00:10 +00:00
printSwStatus('App has been cached for offline use.');
},
updatefound() {
setSwStatus({ updateFound: true });
2021-09-12 14:00:10 +00:00
printSwStatus('New content is downloading...');
},
updated() {
setSwStatus({ updated: true });
2021-09-12 14:00:10 +00:00
printSwStatus('New content is available; please refresh the page.');
},
offline() {
setSwStatus({ offline: true });
2021-09-12 14:00:10 +00:00
printSwStatus('No internet connection found. Dashy is running in offline mode.');
},
error(error) {
setSwStatus({ error: true });
2021-09-12 14:00:10 +00:00
statusErrorMsg('Service Worker Status', 'Error during SW registration', error);
},
});
}
};
export default registerServiceWorker;