aktueller Stand

This commit is contained in:
root
2025-11-09 15:31:04 +01:00
parent 4fa7217fc3
commit 79a271b453

View File

@@ -58,6 +58,20 @@ function App() {
}, 400); }, 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) => { const normalizeAdminSettings = useCallback((raw) => {
if (!raw) { if (!raw) {
return null; return null;
@@ -149,22 +163,35 @@ function App() {
); );
useEffect(() => { useEffect(() => {
let ticker;
try { try {
const storedToken = localStorage.getItem(TOKEN_STORAGE_KEY); const storedToken = localStorage.getItem(TOKEN_STORAGE_KEY);
if (storedToken) { if (storedToken) {
startSyncProgress('Session wird wiederhergestellt...', 5, true); startSyncProgress('Session wird wiederhergestellt...', 5, true);
ticker = setInterval(() => nudgeSyncProgress('Session wird wiederhergestellt...', 1, 40), 1000);
(async () => { (async () => {
try { try {
await bootstrapSession(storedToken, { progress: { update: updateSyncProgress } }); await bootstrapSession(storedToken, { progress: { update: updateSyncProgress } });
} finally { } finally {
if (ticker) {
clearInterval(ticker);
}
finishSyncProgress(); finishSyncProgress();
} }
})(); })();
} }
} catch (err) { } catch (err) {
console.warn('Konnte gespeicherten Token nicht lesen:', 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( const authorizedFetch = useCallback(
async (url, options = {}, tokenOverride) => { async (url, options = {}, tokenOverride) => {
@@ -228,6 +255,7 @@ function App() {
setError(''); setError('');
setStatus(''); setStatus('');
startSyncProgress('Anmeldung wird geprüft...', 5, true); startSyncProgress('Anmeldung wird geprüft...', 5, true);
const ticker = setInterval(() => nudgeSyncProgress('Anmeldung wird geprüft...', 2, 40), 1000);
try { try {
const response = await fetch('/api/auth/login', { const response = await fetch('/api/auth/login', {
@@ -246,7 +274,8 @@ function App() {
} catch (storageError) { } catch (storageError) {
console.warn('Konnte Token nicht speichern:', 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 } }); await bootstrapSession(data.token, { progress: { update: updateSyncProgress } });
updateSyncProgress('Login abgeschlossen', 95); updateSyncProgress('Login abgeschlossen', 95);
setStatus('Anmeldung erfolgreich. Konfiguration geladen.'); setStatus('Anmeldung erfolgreich. Konfiguration geladen.');
@@ -254,6 +283,7 @@ function App() {
} catch (err) { } catch (err) {
setError(`Login fehlgeschlagen: ${err.message}`); setError(`Login fehlgeschlagen: ${err.message}`);
} finally { } finally {
clearInterval(ticker);
finishSyncProgress(); finishSyncProgress();
setLoading(false); setLoading(false);
} }