Commit eed6cfa4 authored by ThinhNC's avatar ThinhNC

fix: auto-poll RecentJobsWidget progress bar every 4s while jobs are active

parent 306919af
Pipeline #53748 passed with stage
in 2 minutes and 11 seconds
...@@ -22,14 +22,32 @@ export const CRAWL_JOBS_QUERY_KEYS = { ...@@ -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({ return useQuery({
queryKey: CRAWL_JOBS_QUERY_KEYS.list(query), queryKey: CRAWL_JOBS_QUERY_KEYS.list(query),
queryFn: () => crawlJobService.getJobs(query), queryFn: () => crawlJobService.getJobs(query),
placeholderData: (previousData) => previousData, placeholderData: (previousData) => previousData,
staleTime: 5000, 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