fix: block dashboard until initial store sync completes and show ETA
This commit is contained in:
35
src/App.js
35
src/App.js
@@ -32,6 +32,7 @@ function App() {
|
||||
block: false,
|
||||
etaSeconds: null
|
||||
});
|
||||
const [initializing, setInitializing] = useState(false);
|
||||
|
||||
const weekdays = ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag'];
|
||||
const delay = useCallback((ms) => new Promise((resolve) => setTimeout(resolve, ms)), []);
|
||||
@@ -119,6 +120,7 @@ function App() {
|
||||
setAdminSettings(null);
|
||||
setAdminSettingsLoading(false);
|
||||
setAvailableCollapsed(true);
|
||||
setInitializing(false);
|
||||
}, []);
|
||||
|
||||
const handleUnauthorized = useCallback(() => {
|
||||
@@ -244,6 +246,7 @@ function App() {
|
||||
setLoading(true);
|
||||
setError('');
|
||||
setStatus('');
|
||||
setInitializing(true);
|
||||
startSyncProgress('Anmeldung wird geprüft...', 5, true);
|
||||
const ticker = setInterval(() => nudgeSyncProgress('Anmeldung wird geprüft...', 2, 40), 1000);
|
||||
|
||||
@@ -284,6 +287,7 @@ function App() {
|
||||
} finally {
|
||||
clearInterval(ticker);
|
||||
finishSyncProgress();
|
||||
setInitializing(false);
|
||||
setLoading(false);
|
||||
}
|
||||
};
|
||||
@@ -461,11 +465,17 @@ function App() {
|
||||
let ticker;
|
||||
let cancelled = false;
|
||||
(async () => {
|
||||
let storedToken = null;
|
||||
try {
|
||||
storedToken = localStorage.getItem(TOKEN_STORAGE_KEY);
|
||||
} catch (err) {
|
||||
console.warn('Konnte gespeicherten Token nicht lesen:', err);
|
||||
}
|
||||
if (!storedToken) {
|
||||
return;
|
||||
}
|
||||
setInitializing(true);
|
||||
try {
|
||||
const storedToken = localStorage.getItem(TOKEN_STORAGE_KEY);
|
||||
if (!storedToken) {
|
||||
return;
|
||||
}
|
||||
startSyncProgress('Session wird wiederhergestellt...', 5, true);
|
||||
ticker = setInterval(() => nudgeSyncProgress('Session wird wiederhergestellt...', 1, 40), 1000);
|
||||
const result = await bootstrapSession(storedToken, { progress: { update: updateSyncProgress } });
|
||||
@@ -485,12 +495,13 @@ function App() {
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.warn('Konnte gespeicherten Token nicht lesen oder wiederherstellen:', err);
|
||||
console.warn('Konnte Session nicht wiederherstellen:', err);
|
||||
} finally {
|
||||
if (ticker) {
|
||||
clearInterval(ticker);
|
||||
}
|
||||
finishSyncProgress();
|
||||
setInitializing(false);
|
||||
}
|
||||
})();
|
||||
return () => {
|
||||
@@ -885,6 +896,20 @@ function App() {
|
||||
);
|
||||
}
|
||||
|
||||
if (initializing) {
|
||||
return (
|
||||
<>
|
||||
<div className="min-h-screen flex items-center justify-center bg-gray-100">
|
||||
<div className="text-center p-8 bg-white rounded-lg shadow">
|
||||
<p className="text-xl font-semibold text-gray-800 mb-2">Initialisiere...</p>
|
||||
<p className="text-gray-500">Bitte warte, bis alle Betriebe geprüft wurden.</p>
|
||||
</div>
|
||||
</div>
|
||||
<StoreSyncOverlay state={syncProgress} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
if (loading) {
|
||||
return (
|
||||
<>
|
||||
|
||||
Reference in New Issue
Block a user