import { useState } from "react"; import { useQuery } from "@tanstack/react-query"; import { AgGridReact } from "ag-grid-react"; import { AllCommunityModule, ModuleRegistry } from "ag-grid-community"; import { sqlPreview, sqlExport } from "../api/sql"; // Register AG Grid modules once at module load time ModuleRegistry.registerModules([AllCommunityModule]); interface Props { sessionId: string; } export function ResultsPanel({ sessionId }: Props) { const [limit, setLimit] = useState(10); const { data, isLoading, error } = useQuery({ queryKey: ["preview", sessionId, limit], queryFn: () => sqlPreview(sessionId, { limit, offset: 0 }), }); async function handleExport() { await sqlExport(sessionId); } const isScalar = data != null && data.columns.length === 1 && data.rows.length === 1; const columnDefs = data ? data.columns.map((col) => ({ field: col, headerName: col })) : []; const rowData = data ? data.rows.map((row) => { const obj: Record = {}; data.columns.forEach((col, i) => { obj[col] = row[i]; }); return obj; }) : []; return (
{/* Limit selector */}
{/* Loading / error states */} {isLoading &&
Loading…
} {error &&
Error: {String(error)}
} {/* Scalar result: 1 col × 1 row → bold value */} {data && isScalar && ( {String(data.rows[0][0])} )} {/* Grid for everything else */} {data && !isScalar && ( <>
{data.truncated &&
(results truncated)
} )}
); }