import { useQuery, type Query } from '@tanstack/react-query'; import { syncClock } from '../lib/clock'; import { api } from './endpoints'; import { queryKeys } from './queryKeys'; import type { Status } from './types/status'; const BUSY_POLL_MILLISECONDS = 2000; export const IDLE_POLL_MILLISECONDS = 30000; export function statusPollInterval( query: Pick< Query< Status >, 'state' > ): number { if ( query.state.data?.scan.state === 'running' ) { return BUSY_POLL_MILLISECONDS; } return IDLE_POLL_MILLISECONDS; } async function fetchStatus( signal: AbortSignal ): Promise< Status > { const status = await api.status( signal ); syncClock( status.now ); return status; } export function useStatus() { return useQuery( { queryKey: queryKeys.status, queryFn: ( { signal } ) => fetchStatus( signal ), staleTime: 0, refetchInterval: statusPollInterval, } ); }