From acda1a8bb81adb83cbbe60459a217262da60f46e Mon Sep 17 00:00:00 2001 From: ordinarthur <@arthurbarre.js@gmail.com> Date: Tue, 14 Apr 2026 13:27:40 +0200 Subject: [PATCH] feat: auto-update PWA when new version available Uses registerSW to detect new service worker versions and reload automatically. Defers reload if file transfers are active, checking every 30s until transfers complete. Co-Authored-By: Claude Opus 4.6 --- web/src/main.tsx | 26 ++++++++++++++++++++++++++ web/tsconfig.json | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/web/src/main.tsx b/web/src/main.tsx index b3c2e37..23bc6d9 100644 --- a/web/src/main.tsx +++ b/web/src/main.tsx @@ -1,9 +1,35 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; import { BrowserRouter } from "react-router-dom"; +import { registerSW } from "virtual:pwa-register"; import App from "./App"; +import { useStore } from "./stores/useStore"; import "./index.css"; +// Auto-reload when a new service worker is available +const updateSW = registerSW({ + onNeedRefresh() { + const hasActiveTransfers = useStore + .getState() + .transfers.some((t) => t.status === "transferring" || t.status === "pending"); + if (hasActiveTransfers) { + // Defer update — check again every 30s + const interval = setInterval(() => { + const still = useStore + .getState() + .transfers.some((t) => t.status === "transferring" || t.status === "pending"); + if (!still) { + clearInterval(interval); + updateSW(true); + } + }, 30_000); + } else { + updateSW(true); + } + }, + onOfflineReady() {}, +}); + createRoot(document.getElementById("root")!).render( diff --git a/web/tsconfig.json b/web/tsconfig.json index 17e185f..0253487 100644 --- a/web/tsconfig.json +++ b/web/tsconfig.json @@ -3,7 +3,7 @@ "compilerOptions": { "outDir": "./dist", "jsx": "react-jsx", - "types": ["vite/client"], + "types": ["vite/client", "vite-plugin-pwa/client"], "declaration": false, "declarationMap": false },