From 19303eefad18ecb360b2b702927151cd59598488 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Thu, 26 Mar 2026 09:54:24 +0100 Subject: [PATCH] feat: auto-slide time range forward when preset is active with auto-refresh Adds a 10s interval that recomputes the preset time range boundaries so dashboards stay current without manual refresh. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/design-system/providers/GlobalFilterProvider.tsx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/design-system/providers/GlobalFilterProvider.tsx b/src/design-system/providers/GlobalFilterProvider.tsx index 1ec79aa..cfabfcd 100644 --- a/src/design-system/providers/GlobalFilterProvider.tsx +++ b/src/design-system/providers/GlobalFilterProvider.tsx @@ -1,4 +1,4 @@ -import { createContext, useContext, useState, useCallback, type ReactNode } from 'react' +import { createContext, useContext, useState, useCallback, useEffect, type ReactNode } from 'react' import { computePresetRange } from '../utils/timePresets' export interface TimeRange { @@ -66,6 +66,16 @@ export function GlobalFilterProvider({ children }: { children: ReactNode }) { try { localStorage.setItem('cameleer:auto-refresh', String(enabled)) } catch {} }, []) + // Keep the time range sliding forward when a preset is active and live + useEffect(() => { + if (!autoRefresh || !timeRange.preset) return + const id = setInterval(() => { + const { start, end } = computePresetRange(timeRange.preset!) + setTimeRangeState({ start, end, preset: timeRange.preset }) + }, 10_000) + return () => clearInterval(id) + }, [autoRefresh, timeRange.preset]) + const isInTimeRange = useCallback( (timestamp: Date) => { if (timeRange.preset) {