Commit a9a76793 authored by ThinhNC's avatar ThinhNC

feat: add crawl job detail page and corresponding API service

parent d6084364
Pipeline #53120 passed with stage
in 2 minutes and 4 seconds
......@@ -585,11 +585,10 @@ export default function CrawlJobDetailPage({ params }: PageProps) {
id: "pages",
label: t.jobDetail.pagesTab,
icon: FileText,
count: (pagesData?.total && pagesData.total > 0)
count:
pagesData?.total !== undefined && pagesData.total > 0
? pagesData.total
: isJobRunning && job?.successPages
? job.successPages
: 0,
: (job?.successPages ?? 0),
},
{ id: "diff", label: t.jobDetail.diffTab, icon: Sparkles, count: diffData?.summary?.changeRate ? `${Math.round(diffData.summary.changeRate * 100)}%` : undefined },
].map((tabItem) => {
......@@ -857,7 +856,7 @@ export default function CrawlJobDetailPage({ params }: PageProps) {
<p className="text-xs text-muted-foreground">{t.jobDetail.pages.subtitle}</p>
</div>
<Badge variant="secondary" className="rounded-full">
{pagesData?.total || 0} {t.jobDetail.pages.pagesExtracted}
{pagesData?.total ?? job?.successPages ?? 0} {t.jobDetail.pages.pagesExtracted}
</Badge>
</div>
......
......@@ -219,15 +219,39 @@ export const crawlJobService = {
const response = await apiClient.get<
ApiResponse<{
items: CrawlPagePreview[];
total: number;
page: number;
limit: number;
totalPages: number;
total?: number;
page?: number;
limit?: number;
totalPages?: number;
meta?: {
total?: number;
page?: number;
limit?: number;
totalPages?: number;
};
}>
>(`/crawl-jobs/${id}/pages/preview?${params.toString()}`);
if (response.data?.data) {
return response.data.data;
const raw = response.data?.data;
if (raw) {
const total =
raw.total ??
raw.meta?.total ??
(Array.isArray(raw.items) ? raw.items.length : 0);
const totalPages =
raw.totalPages ??
raw.meta?.totalPages ??
Math.max(1, Math.ceil(total / limit));
const pageNum = raw.page ?? raw.meta?.page ?? page;
const limitNum = raw.limit ?? raw.meta?.limit ?? limit;
return {
items: raw.items || [],
total,
page: pageNum,
limit: limitNum,
totalPages,
};
}
throw new Error("Invalid pages preview response");
},
......
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