'use client'; import { Archive, Eye, RotateCcw } from 'lucide-react'; import { useRouter } from 'next/navigation'; import { useState, useTransition } from 'react'; import { toast } from 'sonner'; import { updateWorkflowStatusApiV1WorkflowWorkflowIdStatusPut } from '@/client/sdk.gen'; import { Button } from '@/components/ui/button'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; interface Workflow { id: number; name: string; status: string; created_at: string; total_runs?: number | null; } interface WorkflowTableProps { workflows: Workflow[]; showArchived: boolean; } export function WorkflowTable({ workflows, showArchived }: WorkflowTableProps) { const router = useRouter(); const [isPending, startTransition] = useTransition(); const [loadingWorkflowId, setLoadingWorkflowId] = useState(null); const handleView = (id: number) => { router.push(`/workflow/${id}`); }; const handleArchiveToggle = async (id: number, currentStatus: string) => { const newStatus = currentStatus === 'active' ? 'archived' : 'active'; const action = currentStatus === 'active' ? 'Archive' : 'Restore'; setLoadingWorkflowId(id); try { const response = await updateWorkflowStatusApiV1WorkflowWorkflowIdStatusPut({ path: { workflow_id: id, }, body: { status: newStatus, }, }); if (response.data) { toast.success(`Workflow ${action.toLowerCase()}d successfully`); startTransition(() => { router.refresh(); }); } } catch (error) { console.error(`Error ${action.toLowerCase()}ing workflow:`, error); toast.error(`Failed to ${action.toLowerCase()} workflow`); } finally { setLoadingWorkflowId(null); } }; return (
Agent Name Created At Total Runs Actions {workflows.map((workflow) => ( {workflow.name} {new Date(workflow.created_at).toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric', })} {workflow.total_runs || 0}
))}
); }