aktueller Stand
This commit is contained in:
34
src/App.js
34
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user