import { useCallback, useRef, useState } from 'react'
import { usePolling } from '../../hooks/usePolling'
import { getScanJobsList, ScanJob } from '../../scanJobs/api'
export const usePollingScanJob = (
defaultClusterId?: string,
onlyRunning: boolean = true,
_pageSize: number = 10
) => {
const [scanJobs, setScanJobs] = useState<ScanJob[]>([])
const [page, setPage] = useState(1)
const [pageSize, setPageSize] = useState(_pageSize)
const totalCountRef = useRef(0)
const fetchJobs = useCallback(
async (clusterId?: string) => {
const res = await getScanJobsList({
cluster_id: clusterId || defaultClusterId,
page_num: page,
page_size: pageSize,
})
totalCountRef.current = res.totalCount
const data = res.data
const running = data.filter(job => ['running', 'processing'].includes(job.status))
setScanJobs(onlyRunning ? running : data)
const hasRunning = running.length > 0
setEnabled(hasRunning)
},
[onlyRunning, defaultClusterId, page, pageSize]
)
const { loading: runningLoading, setEnabled } = usePolling(fetchJobs, 1000, false)
return {
scanJobs,
runningLoading,
setEnabled,
fetchJobs,
setScanJobs,
setPage,
setPageSize,
totalCount: totalCountRef.current,
page,
pageSize,
}
}