陈帅 7 лет назад
Родитель
Сommit
6e65ecd52c
2 измененных файлов с 33 добавлено и 25 удалено
  1. 2 1
      .eslintignore
  2. 31 24
      src/global.js

+ 2 - 1
.eslintignore

@@ -1,2 +1,3 @@
 /functions/mock/**
-/scripts
+/scripts
+/config

+ 31 - 24
src/global.js

@@ -9,9 +9,38 @@ window.addEventListener('sw.offline', () => {
 
 // Pop up a prompt on the page asking the user if they want to use the latest version
 window.addEventListener('sw.updated', e => {
+  const reloadSW = async () => {
+    // Check if there is sw whose state is waiting in ServiceWorkerRegistration
+    // https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration
+    const worker = e.detail && e.detail.waiting;
+    if (!worker) {
+      return Promise.resolve();
+    }
+    // Send skip-waiting event to waiting SW with MessageChannel
+    await new Promise((resolve, reject) => {
+      const channel = new MessageChannel();
+      channel.port1.onmessage = event => {
+        if (event.data.error) {
+          reject(event.data.error);
+        } else {
+          resolve(event.data);
+        }
+      };
+      worker.postMessage({ type: 'skip-waiting' }, [channel.port2]);
+    });
+    // Refresh current page to use the updated HTML and other assets after SW has skiped waiting
+    window.location.reload(true);
+    return true;
+  };
   const key = `open${Date.now()}`;
   const btn = (
-    <Button type="primary" onClick={() => notification.close(key)}>
+    <Button
+      type="primary"
+      onClick={() => {
+        notification.close(key);
+        reloadSW();
+      }}
+    >
       {formatMessage({ id: 'app.pwa.serviceworker.updated.ok' })}
     </Button>
   );
@@ -20,28 +49,6 @@ window.addEventListener('sw.updated', e => {
     description: formatMessage({ id: 'app.pwa.serviceworker.updated.hint' }),
     btn,
     key,
-    onClose: async () => {
-      // Check if there is sw whose state is waiting in ServiceWorkerRegistration
-      // https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration
-      const worker = e.detail && e.detail.waiting;
-      if (!worker) {
-        return Promise.resolve();
-      }
-      // Send skip-waiting event to waiting SW with MessageChannel
-      await new Promise((resolve, reject) => {
-        const channel = new MessageChannel();
-        channel.port1.onmessage = event => {
-          if (event.data.error) {
-            reject(event.data.error);
-          } else {
-            resolve(event.data);
-          }
-        };
-        worker.postMessage({ type: 'skip-waiting' }, [channel.port2]);
-      });
-      // Refresh current page to use the updated HTML and other assets after SW has skiped waiting
-      window.location.reload(true);
-      return true;
-    },
+    onClose: async () => {},
   });
 });