Files
test_dashboard/dashboard/src/hooks/useStats.js
T

43 lines
1.1 KiB
JavaScript
Raw Normal View History

2026-05-20 11:52:18 -04:00
import { useQuery, useQueryClient } from '@tanstack/react-query'
import { useEffect } from 'react'
2026-05-28 12:34:01 -04:00
import { getScanStatus, getStats } from '../lib/api'
2026-05-20 11:52:18 -04:00
export function useStats() {
const queryClient = useQueryClient()
// Subscribe to SSE updates once; invalidate both stats and tests on any update
useEffect(() => {
const es = new EventSource('/api/events')
es.onmessage = (e) => {
try {
const data = JSON.parse(e.data)
if (data.type === 'update') {
queryClient.invalidateQueries({ queryKey: ['stats'] })
queryClient.invalidateQueries({ queryKey: ['tests'] })
}
} catch { /* ignore malformed */ }
}
return () => es.close()
}, [queryClient])
2026-05-28 12:34:01 -04:00
const scanStatusQuery = useQuery({
queryKey: ['scanStatus'],
queryFn: getScanStatus,
refetchInterval: (query) => (query.state.data?.scanning ? 1000 : 5000),
})
const isScanning = scanStatusQuery.data?.scanning ?? true
const statsQuery = useQuery({
queryKey: ['stats'],
queryFn: getStats,
enabled: !isScanning,
refetchInterval: isScanning ? false : 30_000,
})
return {
...statsQuery,
isScanning,
}
2026-05-20 11:52:18 -04:00
}