Fix: doppelte SW-Registrierung entfernt, Reload bei App-Fokus; Schnellzugriff gleichgross; Kalender ohne Komma
This commit is contained in:
@@ -2,13 +2,12 @@ import React from 'react'
|
||||
import ReactDOM from 'react-dom/client'
|
||||
import App from './App.jsx'
|
||||
|
||||
// ── Build-Zeit Check ──────────────────────────────────────────────────────────
|
||||
// Globale Variable – synchron lesbar, kein dynamischer Import nötig
|
||||
// ── Build-Zeit Check & Auto-Reload ───────────────────────────────────────────
|
||||
window.__newBuildAvailable = false;
|
||||
|
||||
const STORED_KEY = 'dd_build_time';
|
||||
|
||||
async function checkBuildTime() {
|
||||
async function checkBuildTime({ reloadIfChanged = false } = {}) {
|
||||
try {
|
||||
const r = await fetch('/api/build-time', { cache: 'no-store' });
|
||||
const { buildTime } = await r.json();
|
||||
@@ -18,33 +17,42 @@ async function checkBuildTime() {
|
||||
} else if (stored !== buildTime) {
|
||||
localStorage.setItem(STORED_KEY, buildTime);
|
||||
window.__newBuildAvailable = true;
|
||||
// Wenn explizit gewünscht (App-Fokus): sofort neu laden
|
||||
if (reloadIfChanged) window.location.reload();
|
||||
}
|
||||
} catch {}
|
||||
}
|
||||
|
||||
// Sofort beim Start prüfen, dann alle 60s
|
||||
// Beim Start prüfen
|
||||
checkBuildTime();
|
||||
setInterval(checkBuildTime, 60_000);
|
||||
// Alle 60s im Hintergrund
|
||||
setInterval(() => checkBuildTime(), 60_000);
|
||||
|
||||
// Wenn die App/der Tab wieder in den Vordergrund kommt → prüfen und ggf. sofort neu laden
|
||||
// Das deckt den Fall ab: PWA vom Homescreen öffnen
|
||||
document.addEventListener('visibilitychange', () => {
|
||||
if (document.visibilityState === 'visible') {
|
||||
checkBuildTime({ reloadIfChanged: true });
|
||||
}
|
||||
});
|
||||
window.addEventListener('focus', () => {
|
||||
checkBuildTime({ reloadIfChanged: true });
|
||||
});
|
||||
|
||||
// ── Service Worker ────────────────────────────────────────────────────────────
|
||||
if ('serviceWorker' in navigator) {
|
||||
navigator.serviceWorker.register('/sw.js').then(reg => {
|
||||
if (reg.waiting) reg.waiting.postMessage('SKIP_WAITING');
|
||||
|
||||
reg.addEventListener('updatefound', () => {
|
||||
const nw = reg.installing;
|
||||
nw?.addEventListener('statechange', () => {
|
||||
if (nw.state === 'installed') {
|
||||
nw.postMessage('SKIP_WAITING');
|
||||
}
|
||||
if (nw.state === 'installed') nw.postMessage('SKIP_WAITING');
|
||||
});
|
||||
});
|
||||
|
||||
// Neuer SW aktiv → beim nächsten Seitenwechsel reloaden
|
||||
navigator.serviceWorker.addEventListener('controllerchange', () => {
|
||||
window.__newBuildAvailable = true;
|
||||
});
|
||||
});
|
||||
}).catch(()=>{});
|
||||
}
|
||||
|
||||
ReactDOM.createRoot(document.getElementById('root')).render(
|
||||
|
||||
Reference in New Issue
Block a user