import { useMemo } from 'react' import { ExplainHeader } from './ExplainVisualizer.Header' import { ExplainNodeRenderer } from './ExplainVisualizer.NodeRenderer' import { calculateMaxCost, calculateSummary, createNodeTree } from './ExplainVisualizer.parser' import type { QueryPlanRow } from './ExplainVisualizer.types' export interface ExplainVisualizerProps { rows: readonly QueryPlanRow[] onShowRaw?: () => void } export function ExplainVisualizer({ rows, onShowRaw }: ExplainVisualizerProps) { const parsedTree = useMemo(() => createNodeTree(rows), [rows]) const maxCost = useMemo(() => calculateMaxCost(parsedTree), [parsedTree]) const summary = useMemo(() => calculateSummary(parsedTree), [parsedTree]) if (parsedTree.length === 0) { return (

No execution plan data available

) } return (
{onShowRaw && } {/* Tree visualization */}
{parsedTree.map((node, idx) => ( ))}
) }