'use client' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select' import { useKnowledgeGraphStatus, useBuildKnowledgeGraph, useDeleteKnowledgeGraph } from '@/lib/hooks/use-knowledge-graph' import { LoadingSpinner } from '@/components/common/LoadingSpinner' import { RefreshCw, Trash2, Clock, CheckCircle2, AlertCircle, Loader2, Network } from 'lucide-react' import { formatDistanceToNow } from 'date-fns' import type { NotebookResponse } from '@/lib/types/api' import type { BuildStatus } from '@/lib/types/knowledge-graph' interface GraphControlsProps { notebooks: NotebookResponse[] selectedNotebookId: string | null onSelectNotebook: (id: string | null) => void } const statusConfig: Record = { not_built: { label: 'Not Built', icon: , color: 'bg-gray-500' }, pending: { label: 'Pending', icon: , color: 'bg-yellow-500' }, building: { label: 'Building', icon: , color: 'bg-blue-500' }, completed: { label: 'Completed', icon: , color: 'bg-green-500' }, error: { label: 'Error', icon: , color: 'bg-red-500' }, } export function GraphControls({ notebooks, selectedNotebookId, onSelectNotebook }: GraphControlsProps) { const { data: status } = useKnowledgeGraphStatus(selectedNotebookId) const buildGraph = useBuildKnowledgeGraph() const deleteGraph = useDeleteKnowledgeGraph() const handleBuild = () => { if (selectedNotebookId) { buildGraph.mutate({ notebook_id: selectedNotebookId }) } } const handleDelete = () => { if (selectedNotebookId) { deleteGraph.mutate(selectedNotebookId) } } const currentStatus = status?.build_status || 'not_built' const statusInfo = statusConfig[currentStatus] return ( Graph Settings
{/* Notebook Selector */}
{/* Status */} {selectedNotebookId && (
{statusInfo.icon} {statusInfo.label}
{status && status.node_count > 0 && (
{status.node_count} nodes
{status.edge_count} edges
)} {status?.last_built && (
Last built: {formatDistanceToNow(new Date(status.last_built), { addSuffix: true })}
)}
)}
{/* Actions */} {selectedNotebookId && (
{status && status.node_count > 0 && ( )}
)} {/* Error Message */} {status?.error_message && (
{status.error_message}
)}
) }