nguyenvanduocit
11/6/2019 - 2:21 AM

Install PWA Button

Install PWA Button

export default () => {
  //*** Determine whether or not the PWA has been installed. ***//

  // Step 1: Check local storage
  let pwaInstalled = localStorage.getItem('pwaInstalled') === 'yes';

  // Step 2: Check if the display-mode is standalone. (Only permitted for PWAs.)
  if (!pwaInstalled && window.matchMedia('(display-mode: standalone)').matches) {
    localStorage.setItem('pwaInstalled', 'yes');
    pwaInstalled = true;
  }

  // Step 3: Check if the navigator is in standalone mode. (Again, only permitted for PWAs.)
  if (!pwaInstalled && window.navigator.standalone === true) {
    localStorage.setItem('pwaInstalled', 'yes');
    pwaInstalled = true;
  }

  //*** If the PWA has not been installed, show the install PWA prompt.. ***//
  let deferredPrompt = null;
  window.addEventListener('beforeinstallprompt', (event) => {
    deferredPrompt = event;

    // Show the install button if the prompt appeared.
    if (!pwaInstalled) {
      document.querySelector('#installPWA').style.display = 'inline-flex';
    }
  });

  // When the app is installed, remove install prompts.
  window.addEventListener('appinstalled', (event) => {
    localStorage.setItem('pwaInstalled', 'yes');
    pwaInstalled = true;
    document.getElementById('installPWA').style.display = 'none';
  });

  // When the app is uninstalled, add the prompts back
  return async () => {
    if (deferredPrompt) {
      deferredPrompt.prompt();
      let outcome = await deferredPrompt.userChoice;

      if (outcome === 'accepted') {
        console.log('Postwoman was installed successfully.')
      } else {
        console.log('Postwoman could not be installed. (Installation rejected by user.)')
      }
      deferredPrompt = null;
    }
  };

};