fix: block dashboard until initial store sync completes and show ETA

This commit is contained in:
root
2025-11-09 16:23:39 +01:00
parent 795319c0f2
commit c77b2e55a0
2 changed files with 39 additions and 12 deletions

View File

@@ -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 { try {
const storedToken = localStorage.getItem(TOKEN_STORAGE_KEY); storedToken = localStorage.getItem(TOKEN_STORAGE_KEY);
} catch (err) {
console.warn('Konnte gespeicherten Token nicht lesen:', err);
}
if (!storedToken) { if (!storedToken) {
return; return;
} }
setInitializing(true);
try {
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 (
<> <>

View File

@@ -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!"