import { useMemo } from 'react'; import type { ExecutionDetail, ProcessorNode } from '../../../api/types'; import { useProcessorSnapshot } from '../../../api/queries/executions'; import { ExchangeInspector } from './ExchangeInspector'; import styles from './diagram.module.css'; interface ProcessorDetailPanelProps { execution: ExecutionDetail; selectedNodeId: string | null; } /** Find the processor node matching a diagramNodeId, return its flat index too */ function findProcessor( processors: ProcessorNode[], nodeId: string, indexRef: { idx: number }, ): ProcessorNode | null { for (const proc of processors) { const currentIdx = indexRef.idx; indexRef.idx++; if (proc.diagramNodeId === nodeId) { return { ...proc, _flatIndex: currentIdx } as ProcessorNode & { _flatIndex: number }; } if (proc.children && proc.children.length > 0) { const found = findProcessor(proc.children, nodeId, indexRef); if (found) return found; } } return null; } export function ProcessorDetailPanel({ execution, selectedNodeId }: ProcessorDetailPanelProps) { const processor = useMemo(() => { if (!selectedNodeId || !execution.processors) return null; return findProcessor(execution.processors, selectedNodeId, { idx: 0 }); }, [execution, selectedNodeId]); // Get flat index for snapshot lookup const flatIndex = useMemo(() => { if (!processor) return null; return (processor as ProcessorNode & { _flatIndex?: number })._flatIndex ?? null; }, [processor]); const { data: snapshot } = useProcessorSnapshot( flatIndex != null ? execution.executionId ?? null : null, flatIndex, ); if (!selectedNodeId || !processor) { return (