From 1f0c9efd59b3ffb7e3bc78a14e54c159568182fd Mon Sep 17 00:00:00 2001 From: DeeCee03 Date: Sat, 6 Jun 2026 15:27:29 +0200 Subject: [PATCH] fix(web): Daten nach Aktionen ohne Refresh aktuell MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit staleTime war 30 s → nach „Lock in" zeigte das Dashboard bis zu 30 s alte Cache-Stände, erst ein Browser-Refresh half. Jetzt staleTime 0: Seiten holen beim Aufrufen/Tab-Fokus frische Daten (kein Polling). Zusätzlich invalidiert checkIn jetzt dashboard.overview, dayEntry.todayTeam und todayPresence, damit ein offenes Dashboard sofort mitzieht. Co-Authored-By: Claude Opus 4.8 (1M context) --- apps/web/src/lib/trpc-provider.tsx | 6 +++++- apps/web/src/routes/heute.tsx | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/web/src/lib/trpc-provider.tsx b/apps/web/src/lib/trpc-provider.tsx index bd1b066..1f83793 100644 --- a/apps/web/src/lib/trpc-provider.tsx +++ b/apps/web/src/lib/trpc-provider.tsx @@ -11,7 +11,11 @@ export function TrpcProvider({ children }: { children: React.ReactNode }) { new QueryClient({ defaultOptions: { queries: { - staleTime: 30_000, + // staleTime 0: beim Aufrufen einer Seite / Tab-Fokus werden Daten + // neu geholt, statt bis zu 30 s veraltete Cache-Stände zu zeigen + // (sonst landeten Aktionen wie „Lock in" erst nach Refresh im + // Dashboard). Kein Polling — nur Refetch bei Mount/Fokus. + staleTime: 0, retry: 1, }, mutations: { diff --git a/apps/web/src/routes/heute.tsx b/apps/web/src/routes/heute.tsx index 7699e24..f90a0c2 100644 --- a/apps/web/src/routes/heute.tsx +++ b/apps/web/src/routes/heute.tsx @@ -59,6 +59,10 @@ function CheckInForm({ onDone }: { onDone: () => void }) { toast(msg); await utils.dayEntry.today.invalidate(); await utils.dayEntry.pendingCarryOver.invalidate(); + // Dashboard-Sichten sofort mitziehen (Quote, Anwesenheit, „Heute im Team"). + await utils.dayEntry.todayTeam.invalidate(); + await utils.dayEntry.todayPresence.invalidate(); + await utils.dashboard.overview.invalidate(); onDone(); }, });