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(); }, });