import { useRouter } from "@tanstack/react-router"; import { useEffect, useState } from "react"; const SECOND_MS = 1000; /** Re-runs route loaders on an interval while `active`, and returns a ticking clock for elapsed-time displays. */ export function usePollWhile(active: boolean, intervalMs: number): number { const router = useRouter(); const [now, setNow] = useState(() => Date.now()); useEffect(() => { if (!active) return; const clock = setInterval(() => setNow(Date.now()), SECOND_MS); const poll = setInterval(() => { router.invalidate(); }, intervalMs); return () => { clearInterval(clock); clearInterval(poll); }; }, [active, intervalMs, router]); return now; }