Skip to content

Instantly share code, notes, and snippets.

@fgerschau
Last active February 7, 2020 18:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fgerschau/ad265d2f678ca81bd520b88979c1b2ae to your computer and use it in GitHub Desktop.
Save fgerschau/ad265d2f678ca81bd520b88979c1b2ae to your computer and use it in GitHub Desktop.
import React, { FC, useEffect } from 'react';
import { Snackbar, Button } from '@material-ui/core';
import * as serviceWorker from '../serviceWorker';
const ServiceWorkerWrapper: FC = () => {
const [showReload, setShowReload] = React.useState(false);
const [waitingWorker, setWaitingWorker] = React.useState<ServiceWorker | null>(null);
const onSWUpdate = (registration: ServiceWorkerRegistration) => {
setShowReload(true);
setWaitingWorker(registration.waiting);
};
useEffect(() => {
serviceWorker.register({ onUpdate: onSWUpdate });
}, []);
const reloadPage = () => {
waitingWorker?.postMessage({ type: 'SKIP_WAITING' });
setShowReload(false);
window.location.reload(true);
};
return (
<Snackbar
open={showReload}
message="A new version is available!"
onClick={reloadPage}
anchorOrigin={{ vertical: 'top', horizontal: 'center' }}
action={
<Button
color="inherit"
size="small"
onClick={reloadPage}
>
Reload
</Button>
}
/>
);
}
export default ServiceWorkerWrapper;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment