import { useQuery } from "@tanstack/react-query"; import { getTableColumns, getTableConstraints, getTableIndexes, } from "@/lib/tauri"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Badge } from "@/components/ui/badge"; import { ScrollArea } from "@/components/ui/scroll-area"; interface Props { connectionId: string; schema: string; table: string; } export function TableStructure({ connectionId, schema, table }: Props) { const { data: columns } = useQuery({ queryKey: ["table-columns", connectionId, schema, table], queryFn: () => getTableColumns(connectionId, schema, table), }); const { data: constraints } = useQuery({ queryKey: ["table-constraints", connectionId, schema, table], queryFn: () => getTableConstraints(connectionId, schema, table), }); const { data: indexes } = useQuery({ queryKey: ["table-indexes", connectionId, schema, table], queryFn: () => getTableIndexes(connectionId, schema, table), }); return ( Columns{columns ? ` (${columns.length})` : ""} Constraints{constraints ? ` (${constraints.length})` : ""} Indexes{indexes ? ` (${indexes.length})` : ""} # Name Type Nullable Default Key {columns?.map((col) => ( {col.ordinal_position} {col.name} {col.data_type} {col.character_maximum_length ? `(${col.character_maximum_length})` : ""} {col.is_nullable ? "YES" : "NO"} {col.column_default ?? "—"} {col.is_primary_key && ( PK )} ))}
Name Type Columns {constraints?.map((c) => ( {c.name} {c.constraint_type} {c.columns.join(", ")} ))}
Name Definition Unique Primary {indexes?.map((idx) => ( {idx.name} {idx.definition} {idx.is_unique ? "YES" : "NO"} {idx.is_primary ? "YES" : "NO"} ))}
); }