import { revalidatePath } from "next/cache"; import { redirect } from "next/navigation"; import { listJobs, fetchLibraries, rebuildIndex, IndexJobDto, LibraryDto } from "../../lib/api"; import { JobsList } from "../components/JobsList"; import { Card, CardHeader, CardTitle, CardDescription, CardContent, Button, FormField, FormSelect, FormRow } from "../components/ui"; export const dynamic = "force-dynamic"; export default async function JobsPage({ searchParams }: { searchParams: Promise<{ highlight?: string }> }) { const { highlight } = await searchParams; 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; const result = await rebuildIndex(libraryId || undefined); revalidatePath("/jobs"); redirect(`/jobs?highlight=${result.id}`); } async function triggerFullRebuild(formData: FormData) { "use server"; const libraryId = formData.get("library_id") as string; const result = await rebuildIndex(libraryId || undefined, true); revalidatePath("/jobs"); redirect(`/jobs?highlight=${result.id}`); } return ( <>

Index Jobs

Queue New Job Select a library to rebuild or perform a full rebuild
{libraries.map((lib) => ( ))}
{libraries.map((lib) => ( ))}
); }