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);
}, []);
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);
}