import useJobsList from '@/hooks/useJobsList'; import Link from 'next/link'; import UniversalTable, { TableColumn } from '@/components/UniversalTable'; import { JobConfig } from '@/types'; import JobActionBar from './JobActionBar'; interface JobsTableProps { onlyActive?: boolean; } export default function JobsTable({ onlyActive = false }: JobsTableProps) { const { jobs, status, refreshJobs } = useJobsList(onlyActive); const isLoading = status === 'loading'; const columns: TableColumn[] = [ { title: 'Name', key: 'name', render: row => ( {row.name} ), }, { title: 'Steps', key: 'steps', render: row => { const jobConfig: JobConfig = JSON.parse(row.job_config); const totalSteps = jobConfig.config.process[0].train.steps; return (
{row.step} / {totalSteps}
); }, }, { title: 'GPU', key: 'gpu_ids', }, { title: 'Status', key: 'status', render: row => { let statusClass = 'text-gray-400'; if (row.status === 'completed') statusClass = 'text-green-400'; if (row.status === 'failed') statusClass = 'text-red-400'; if (row.status === 'running') statusClass = 'text-blue-400'; return {row.status}; }, }, { title: 'Info', key: 'info', className: 'truncate max-w-xs', }, { title: 'Actions', key: 'actions', className: 'text-right', render: row => { return ; }, }, ]; return ; }