client/src/registerServiceWorker.js
changeset 1 431977d7c9a6
equal deleted inserted replaced
0:d076a27e5631 1:431977d7c9a6
       
     1 // In production, we register a service worker to serve assets from local cache.
       
     2 
       
     3 // This lets the app load faster on subsequent visits in production, and gives
       
     4 // it offline capabilities. However, it also means that developers (and users)
       
     5 // will only see deployed updates on the "N+1" visit to a page, since previously
       
     6 // cached resources are updated in the background.
       
     7 
       
     8 // To learn more about the benefits of this model, read https://goo.gl/KwvDNy.
       
     9 // This link also includes instructions on opting out of this behavior.
       
    10 
       
    11 export default function register() {
       
    12   if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
       
    13     window.addEventListener('load', () => {
       
    14       const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
       
    15       navigator.serviceWorker
       
    16         .register(swUrl)
       
    17         .then(registration => {
       
    18           registration.onupdatefound = () => {
       
    19             const installingWorker = registration.installing;
       
    20             installingWorker.onstatechange = () => {
       
    21               if (installingWorker.state === 'installed') {
       
    22                 if (navigator.serviceWorker.controller) {
       
    23                   // At this point, the old content will have been purged and
       
    24                   // the fresh content will have been added to the cache.
       
    25                   // It's the perfect time to display a "New content is
       
    26                   // available; please refresh." message in your web app.
       
    27                   console.log('New content is available; please refresh.');
       
    28                 } else {
       
    29                   // At this point, everything has been precached.
       
    30                   // It's the perfect time to display a
       
    31                   // "Content is cached for offline use." message.
       
    32                   console.log('Content is cached for offline use.');
       
    33                 }
       
    34               }
       
    35             };
       
    36           };
       
    37         })
       
    38         .catch(error => {
       
    39           console.error('Error during service worker registration:', error);
       
    40         });
       
    41     });
       
    42   }
       
    43 }
       
    44 
       
    45 export function unregister() {
       
    46   if ('serviceWorker' in navigator) {
       
    47     navigator.serviceWorker.ready.then(registration => {
       
    48       registration.unregister();
       
    49     });
       
    50   }
       
    51 }