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 },