nimbleghost пре 2 година
родитељ
комит
9fa1288dbc
3 измењених фајлова са 32 додато и 1 уклоњено
  1. 3 0
      web/public/sw.js
  2. 28 0
      web/src/index.jsx
  3. 1 1
      web/vite.config.js

+ 3 - 0
web/public/sw.js

@@ -2,6 +2,7 @@
 import { cleanupOutdatedCaches, createHandlerBoundToURL, precacheAndRoute } from "workbox-precaching";
 import { NavigationRoute, registerRoute } from "workbox-routing";
 import { NetworkFirst } from "workbox-strategies";
+import { clientsClaim } from "workbox-core";
 
 import { dbAsync } from "../src/app/db";
 
@@ -224,6 +225,8 @@ precacheAndRoute(
   self.__WB_MANIFEST
 );
 
+// Claim all open windows
+clientsClaim();
 // Delete any cached old dist files from previous service worker versions
 cleanupOutdatedCaches();
 

+ 28 - 0
web/src/index.jsx

@@ -1,6 +1,34 @@
 import * as React from "react";
 import { createRoot } from "react-dom/client";
+// eslint-disable-next-line import/no-unresolved
+import { registerSW } from "virtual:pwa-register";
 import App from "./components/App";
 
+// fetch new sw every hour, i.e. update app every hour while running
+const intervalMS = 60 * 60 * 1000;
+
+// https://vite-pwa-org.netlify.app/guide/periodic-sw-updates.html
+registerSW({
+  onRegisteredSW(swUrl, registration) {
+    if (!registration) {
+      return;
+    }
+
+    setInterval(async () => {
+      if (registration.installing || navigator?.onLine === false) return;
+
+      const resp = await fetch(swUrl, {
+        cache: "no-store",
+        headers: {
+          cache: "no-store",
+          "cache-control": "no-cache",
+        },
+      });
+
+      if (resp?.status === 200) await registration.update();
+    }, intervalMS);
+  },
+});
+
 const root = createRoot(document.querySelector("#root"));
 root.render(<App />);

+ 1 - 1
web/vite.config.js

@@ -16,7 +16,7 @@ export default defineConfig(({ mode }) => ({
     react(),
     VitePWA({
       registerType: "autoUpdate",
-      injectRegister: "inline",
+      injectRegister: null,
       strategies: "injectManifest",
       devOptions: {
         enabled: true,