Something went wrong. Try again.
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344import { useEffect, useRef, useState } from 'react';import type { StatsSnapshot } from '../shared/stats';import { makeDemo } from './demo';import { useTimeRange } from './TimeRange';import { startPolling } from './polling';import { setDirectRange, subscribeDirectStats } from './directClient';
export function useStats(demo: boolean, paused: boolean) { const { range, rangeSeconds } = useTimeRange(); const [data, setData] = useState<StatsSnapshot | null>(null); const [error, setError] = useState(false); const pausedRef = useRef(paused); const latest = useRef<StatsSnapshot | null>(null); pausedRef.current = paused; useEffect(() => { setData(null); setError(false); latest.current = null; if (demo) return; return subscribeDirectStats({ onSnapshot: (next, failed) => { const first = !latest.current || latest.current.range.seconds !== next.range.seconds; latest.current = next; if (first || !pausedRef.current) setData(next); setError(failed); }, onError: setError, }); }, [demo]); useEffect(() => { if (!demo) { setDirectRange(range); return; } return startPolling({ poll: async () => { if (!pausedRef.current || !latest.current) { latest.current = makeDemo(range); setData(latest.current); } }, onError: () => setError(true) }); }, [demo, range]); useEffect(() => { if (!paused && latest.current) setData(latest.current); }, [paused]); return { data: data?.range.seconds === rangeSeconds ? data : null, error };}