From be1d9a2f46a55b6e8874377b0da31d968220ab35 Mon Sep 17 00:00:00 2001 From: Usman Baig Date: Mon, 16 Mar 2026 11:39:28 +0100 Subject: [PATCH] feat: add shimmer bar when dashboard is refetching after filter change Shows a thin animated orange bar below the filter bar while SWR revalidates, so users know their filter was applied. Hidden on initial load where the skeleton already provides feedback. --- app/sites/[id]/page.tsx | 9 ++++++++- tailwind.config.ts | 5 +++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/app/sites/[id]/page.tsx b/app/sites/[id]/page.tsx index 9a0557b..a89999f 100644 --- a/app/sites/[id]/page.tsx +++ b/app/sites/[id]/page.tsx @@ -237,7 +237,7 @@ export default function SiteDashboardPage() { // Single dashboard request replaces focused hooks (overview, pages, locations, // devices, referrers, goals). The backend runs all queries in parallel // and caches the result in Redis for efficient data loading. - const { data: dashboard, isLoading: dashboardLoading, error: dashboardError } = useDashboard(siteId, dateRange.start, dateRange.end, interval, filtersParam || undefined) + const { data: dashboard, isLoading: dashboardLoading, isValidating: dashboardValidating, error: dashboardError } = useDashboard(siteId, dateRange.start, dateRange.end, interval, filtersParam || undefined) const { data: realtimeData } = useRealtime(siteId) const { data: prevStats } = useStats(siteId, prevRange.start, prevRange.end) const { data: prevDailyStats } = useDailyStats(siteId, prevRange.start, prevRange.end, interval) @@ -531,6 +531,13 @@ export default function SiteDashboardPage() { + {/* Refetch indicator — visible when SWR is revalidating with stale data on screen */} + {dashboardValidating && !dashboardLoading && ( +
+
+
+ )} + {/* Advanced Chart with Integrated Stats */}