From 79a271b453590579332fcad81fda85fabb300858 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 9 Nov 2025 15:31:04 +0100 Subject: [PATCH] aktueller Stand --- src/App.js | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/App.js b/src/App.js index ebebd42..c7ea047 100644 --- a/src/App.js +++ b/src/App.js @@ -58,6 +58,20 @@ function App() { }, 400); }, []); + const nudgeSyncProgress = useCallback((message, increment = 2, ceiling = 80) => { + setSyncProgress((prev) => { + if (!prev.active) { + return prev; + } + const nextPercent = Math.min(ceiling, (prev.percent || 0) + increment); + return { + ...prev, + percent: nextPercent, + message: message || prev.message + }; + }); + }, []); + const normalizeAdminSettings = useCallback((raw) => { if (!raw) { return null; @@ -149,22 +163,35 @@ function App() { ); useEffect(() => { + let ticker; try { const storedToken = localStorage.getItem(TOKEN_STORAGE_KEY); if (storedToken) { startSyncProgress('Session wird wiederhergestellt...', 5, true); + ticker = setInterval(() => nudgeSyncProgress('Session wird wiederhergestellt...', 1, 40), 1000); (async () => { try { await bootstrapSession(storedToken, { progress: { update: updateSyncProgress } }); } finally { + if (ticker) { + clearInterval(ticker); + } finishSyncProgress(); } })(); } } catch (err) { console.warn('Konnte gespeicherten Token nicht lesen:', err); + if (ticker) { + clearInterval(ticker); + } } - }, [bootstrapSession, startSyncProgress, updateSyncProgress, finishSyncProgress]); + return () => { + if (ticker) { + clearInterval(ticker); + } + }; + }, [bootstrapSession, startSyncProgress, updateSyncProgress, finishSyncProgress, nudgeSyncProgress]); const authorizedFetch = useCallback( async (url, options = {}, tokenOverride) => { @@ -228,6 +255,7 @@ function App() { setError(''); setStatus(''); startSyncProgress('Anmeldung wird geprüft...', 5, true); + const ticker = setInterval(() => nudgeSyncProgress('Anmeldung wird geprüft...', 2, 40), 1000); try { const response = await fetch('/api/auth/login', { @@ -246,7 +274,8 @@ function App() { } catch (storageError) { console.warn('Konnte Token nicht speichern:', storageError); } - updateSyncProgress('Zugang bestätigt. Session wird aufgebaut...', 25); + clearInterval(ticker); + updateSyncProgress('Zugang bestätigt. Session wird aufgebaut...', 45); await bootstrapSession(data.token, { progress: { update: updateSyncProgress } }); updateSyncProgress('Login abgeschlossen', 95); setStatus('Anmeldung erfolgreich. Konfiguration geladen.'); @@ -254,6 +283,7 @@ function App() { } catch (err) { setError(`Login fehlgeschlagen: ${err.message}`); } finally { + clearInterval(ticker); finishSyncProgress(); setLoading(false); }