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