import { revalidatePath } from "next/cache"; import { listJobs, fetchLibraries, rebuildIndex, cancelJob, IndexJobDto, LibraryDto } from "../../lib/api"; export const dynamic = "force-dynamic"; export default async function JobsPage() { const [jobs, libraries] = await Promise.all([ listJobs().catch(() => [] as IndexJobDto[]), fetchLibraries().catch(() => [] as LibraryDto[]) ]); const libraryMap = new Map(libraries.map(l => [l.id, l.name])); async function triggerRebuild(formData: FormData) { "use server"; const libraryId = formData.get("library_id") as string; await rebuildIndex(libraryId || undefined); revalidatePath("/jobs"); } async function cancelJobAction(formData: FormData) { "use server"; const id = formData.get("id") as string; await cancelJob(id); revalidatePath("/jobs"); } return ( <>
| ID | Library | Type | Status | Created | Actions |
|---|---|---|---|---|---|
{job.id.slice(0, 8)}
|
{job.library_id ? libraryMap.get(job.library_id) || job.library_id.slice(0, 8) : "—"} | {job.type} | {job.status} {job.error_opt && !} | {new Date(job.created_at).toLocaleString()} | {job.status === "pending" || job.status === "running" ? ( ) : null} |