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,
|
block: false,
|
||||||
etaSeconds: null
|
etaSeconds: null
|
||||||
});
|
});
|
||||||
|
const [initializing, setInitializing] = useState(false);
|
||||||
|
|
||||||
const weekdays = ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag'];
|
const weekdays = ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag'];
|
||||||
const delay = useCallback((ms) => new Promise((resolve) => setTimeout(resolve, ms)), []);
|
const delay = useCallback((ms) => new Promise((resolve) => setTimeout(resolve, ms)), []);
|
||||||
@@ -119,6 +120,7 @@ function App() {
|
|||||||
setAdminSettings(null);
|
setAdminSettings(null);
|
||||||
setAdminSettingsLoading(false);
|
setAdminSettingsLoading(false);
|
||||||
setAvailableCollapsed(true);
|
setAvailableCollapsed(true);
|
||||||
|
setInitializing(false);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const handleUnauthorized = useCallback(() => {
|
const handleUnauthorized = useCallback(() => {
|
||||||
@@ -244,6 +246,7 @@ function App() {
|
|||||||
setLoading(true);
|
setLoading(true);
|
||||||
setError('');
|
setError('');
|
||||||
setStatus('');
|
setStatus('');
|
||||||
|
setInitializing(true);
|
||||||
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);
|
const ticker = setInterval(() => nudgeSyncProgress('Anmeldung wird geprüft...', 2, 40), 1000);
|
||||||
|
|
||||||
@@ -284,6 +287,7 @@ function App() {
|
|||||||
} finally {
|
} finally {
|
||||||
clearInterval(ticker);
|
clearInterval(ticker);
|
||||||
finishSyncProgress();
|
finishSyncProgress();
|
||||||
|
setInitializing(false);
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -461,11 +465,17 @@ function App() {
|
|||||||
let ticker;
|
let ticker;
|
||||||
let cancelled = false;
|
let cancelled = false;
|
||||||
(async () => {
|
(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 {
|
try {
|
||||||
const storedToken = localStorage.getItem(TOKEN_STORAGE_KEY);
|
|
||||||
if (!storedToken) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
startSyncProgress('Session wird wiederhergestellt...', 5, true);
|
startSyncProgress('Session wird wiederhergestellt...', 5, true);
|
||||||
ticker = setInterval(() => nudgeSyncProgress('Session wird wiederhergestellt...', 1, 40), 1000);
|
ticker = setInterval(() => nudgeSyncProgress('Session wird wiederhergestellt...', 1, 40), 1000);
|
||||||
const result = await bootstrapSession(storedToken, { progress: { update: updateSyncProgress } });
|
const result = await bootstrapSession(storedToken, { progress: { update: updateSyncProgress } });
|
||||||
@@ -485,12 +495,13 @@ function App() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.warn('Konnte gespeicherten Token nicht lesen oder wiederherstellen:', err);
|
console.warn('Konnte Session nicht wiederherstellen:', err);
|
||||||
} finally {
|
} finally {
|
||||||
if (ticker) {
|
if (ticker) {
|
||||||
clearInterval(ticker);
|
clearInterval(ticker);
|
||||||
}
|
}
|
||||||
finishSyncProgress();
|
finishSyncProgress();
|
||||||
|
setInitializing(false);
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
return () => {
|
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) {
|
if (loading) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -euo pipefail
|
||||||
|
|
||||||
# Optionaler erster Parameter als Git-Message
|
# Alle übergebenen Argumente als Commit-Message (oder Fallback)
|
||||||
MSG="${1:-Aktueller Stand}"
|
if [[ $# -gt 0 ]]; then
|
||||||
|
MSG="$*"
|
||||||
|
else
|
||||||
|
MSG="Aktueller Stand"
|
||||||
|
fi
|
||||||
|
|
||||||
# Prüfen, ob Änderungen vorhanden sind
|
# Nur committen, wenn es Änderungen gibt
|
||||||
if [[ -n $(git status --porcelain) ]]; then
|
if [[ -n $(git status --porcelain) ]]; then
|
||||||
echo "📦 Änderungen erkannt – committe mit Nachricht: '$MSG'"
|
echo "📦 Committe mit Nachricht: '$MSG'"
|
||||||
git add .
|
git add .
|
||||||
git commit -m "$MSG"
|
git commit -m "$MSG"
|
||||||
git push
|
git push
|
||||||
@@ -17,6 +21,4 @@ fi
|
|||||||
# Container neu bauen und starten
|
# Container neu bauen und starten
|
||||||
echo "🐳 Starte Docker Compose Build & Up..."
|
echo "🐳 Starte Docker Compose Build & Up..."
|
||||||
DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 docker compose up --build -d pickup-config-app
|
DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 docker compose up --build -d pickup-config-app
|
||||||
|
|
||||||
echo "🚀 Fertig!"
|
echo "🚀 Fertig!"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user