anydrop/web/src/main.tsx
ordinarthur acda1a8bb8
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 35s
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 <noreply@anthropic.com>
2026-04-14 13:27:40 +02:00

40 lines
1.1 KiB
TypeScript

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(
<StrictMode>
<BrowserRouter>
<App />
</BrowserRouter>
</StrictMode>,
);