import React, { useState } from "react"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui"; import { Pencil, Trash2, FileText } from "lucide-react"; import type { JobInfo } from "@/lib/tauriCommands"; import { deleteResourceCmd, getResourceYamlCmd } from "@/lib/tauriCommands"; import { ResourceActionMenu } from "./ResourceActionMenu"; import { ConfirmDeleteDialog } from "./ConfirmDeleteDialog"; import { EditResourceModal } from "./EditResourceModal"; import { WorkloadLogsModal } from "./WorkloadLogsModal"; interface JobListProps { jobs: JobInfo[]; clusterId?: string; _clusterId?: string; namespace?: string; _namespace?: string; onRefresh?: () => void; } type ActiveModal = | { type: "logs"; job: JobInfo } | { type: "edit"; job: JobInfo; yaml: string } | { type: "delete"; job: JobInfo } | null; export function JobList({ jobs, clusterId, _clusterId, onRefresh, }: JobListProps) { const cid = clusterId ?? _clusterId ?? ""; const [activeModal, setActiveModal] = useState(null); const [isDeleting, setIsDeleting] = useState(false); const [actionError, setActionError] = useState(null); const openEdit = async (job: JobInfo) => { setActionError(null); try { const yaml = await getResourceYamlCmd(cid, "jobs", job.namespace, job.name); setActiveModal({ type: "edit", job, yaml }); } catch (err) { setActionError(err instanceof Error ? err.message : String(err)); } }; const handleDelete = async () => { if (activeModal?.type !== "delete") return; setIsDeleting(true); try { await deleteResourceCmd(cid, "jobs", activeModal.job.namespace, activeModal.job.name); setActiveModal(null); onRefresh?.(); } finally { setIsDeleting(false); } }; return ( <> {actionError && (

{actionError}

)}
Name Namespace Completions Duration Age Labels Actions {jobs.length === 0 ? ( No jobs found ) : ( jobs.map((job) => ( {job.name} {job.namespace} {job.completions} {job.duration} {job.age} {Object.entries(job.labels) .map(([k, v]) => `${k}=${v}`) .join(", ")} setActiveModal({ type: "logs", job }), }, { label: "Edit", icon: Pencil, onClick: () => openEdit(job), }, { label: "Delete", icon: Trash2, variant: "destructive", onClick: () => setActiveModal({ type: "delete", job }), }, ]} /> )) )}
{activeModal?.type === "logs" && ( { if (!o) setActiveModal(null); }} clusterId={cid} namespace={activeModal.job.namespace} workloadType="job" workloadName={activeModal.job.name} labels={activeModal.job.labels} /> )} {activeModal?.type === "edit" && ( { setActiveModal(null); onRefresh?.(); }} /> )} {activeModal?.type === "delete" && ( { if (!o) setActiveModal(null); }} resourceType="Job" resourceName={activeModal.job.name} isLoading={isDeleting} onConfirm={handleDelete} /> )} ); }