feat(global-filter): add refreshTimeRange() for manual refresh in paused mode
All checks were successful
Build & Publish / publish (push) Successful in 55s

Revert auto-sliding when paused — time range only advances with
auto-refresh on. Add refreshTimeRange() to useGlobalFilters for
on-demand recomputation from the active preset.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-04-03 14:01:47 +02:00
parent 3ef4c5686e
commit c48dffaef2

View File

@@ -12,6 +12,7 @@ export type ExchangeStatus = 'completed' | 'failed' | 'running' | 'warning'
interface GlobalFilterContextValue { interface GlobalFilterContextValue {
timeRange: TimeRange timeRange: TimeRange
setTimeRange: (range: TimeRange) => void setTimeRange: (range: TimeRange) => void
refreshTimeRange: () => void
statusFilters: Set<ExchangeStatus> statusFilters: Set<ExchangeStatus>
toggleStatus: (status: ExchangeStatus) => void toggleStatus: (status: ExchangeStatus) => void
clearStatusFilters: () => void clearStatusFilters: () => void
@@ -66,16 +67,22 @@ export function GlobalFilterProvider({ children }: { children: ReactNode }) {
try { localStorage.setItem('cameleer:auto-refresh', String(enabled)) } catch {} try { localStorage.setItem('cameleer:auto-refresh', String(enabled)) } catch {}
}, []) }, [])
// Keep the time range sliding forward whenever a preset is active. // Keep the time range sliding forward when a preset is active and live
// PAUSED mode only stops query polling — the time window still advances
// so that manual refreshes and sidebar-triggered queries see current data.
useEffect(() => { useEffect(() => {
if (!timeRange.preset) return if (!autoRefresh || !timeRange.preset) return
const id = setInterval(() => { const id = setInterval(() => {
const { start, end } = computePresetRange(timeRange.preset!) const { start, end } = computePresetRange(timeRange.preset!)
setTimeRangeState({ start, end, preset: timeRange.preset }) setTimeRangeState({ start, end, preset: timeRange.preset })
}, 10_000) }, 10_000)
return () => clearInterval(id) return () => clearInterval(id)
}, [autoRefresh, timeRange.preset])
// Recompute time range from preset on demand (for manual refresh in PAUSED mode)
const refreshTimeRange = useCallback(() => {
if (timeRange.preset) {
const { start, end } = computePresetRange(timeRange.preset)
setTimeRangeState({ start, end, preset: timeRange.preset })
}
}, [timeRange.preset]) }, [timeRange.preset])
const isInTimeRange = useCallback( const isInTimeRange = useCallback(
@@ -92,7 +99,7 @@ export function GlobalFilterProvider({ children }: { children: ReactNode }) {
return ( return (
<GlobalFilterContext.Provider <GlobalFilterContext.Provider
value={{ timeRange, setTimeRange, statusFilters, toggleStatus, clearStatusFilters, isInTimeRange, autoRefresh, setAutoRefresh }} value={{ timeRange, setTimeRange, refreshTimeRange, statusFilters, toggleStatus, clearStatusFilters, isInTimeRange, autoRefresh, setAutoRefresh }}
> >
{children} {children}
</GlobalFilterContext.Provider> </GlobalFilterContext.Provider>