Commit 084ac012 authored by ThinhNC's avatar ThinhNC

Merge develop into staging: auto-poll progress bar in RecentJobsWidget

parents c6ed1d90 78d89caa
Pipeline #53750 passed with stage
in 1 minute and 23 seconds
......@@ -22,14 +22,32 @@ export const CRAWL_JOBS_QUERY_KEYS = {
};
/**
* Hook lấy danh sách Crawl Jobs hỗ trợ Server-side Pagination, Sorting và Filter
* Statuses coi là "đang hoạt động" → trigger polling tự động
*/
export function useCrawlJobs(query?: CrawlJobQueryDto) {
const ACTIVE_STATUSES: CrawlJob["status"][] = ["RUNNING", "PROCESSING_EXPORT", "PENDING", "QUEUED"];
/**
* Hook lấy danh sách Crawl Jobs hỗ trợ Server-side Pagination, Sorting và Filter.
* Tự động poll mỗi 4 giây khi có job đang chạy, dừng polling khi tất cả hoàn thành.
*/
export function useCrawlJobs(
query?: CrawlJobQueryDto,
options?: { refetchInterval?: number | false }
) {
return useQuery({
queryKey: CRAWL_JOBS_QUERY_KEYS.list(query),
queryFn: () => crawlJobService.getJobs(query),
placeholderData: (previousData) => previousData,
staleTime: 5000,
// Tự động poll mỗi 4s khi có job đang chạy, dừng khi tất cả xong.
// Caller có thể override bằng options.refetchInterval
refetchInterval: options?.refetchInterval !== undefined
? options.refetchInterval
: (q) => {
const data = q.state.data as { items?: CrawlJob[] } | undefined;
const hasActive = data?.items?.some((j) => ACTIVE_STATUSES.includes(j.status));
return hasActive ? 4000 : false;
},
});
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment