({ node, onNodeSelect }: Props)
| 28 | |
| 29 | /** Clean single-node detail view with filled badge header and 2-column properties */ |
| 30 | export default function GetNodeResult({ node, onNodeSelect }: Props) { |
| 31 | const color = getNodeColor(node.type); |
| 32 | const props = node.properties |
| 33 | ? Object.entries(node.properties).filter(([k]) => !HIDDEN.has(k)) |
| 34 | : []; |
| 35 | |
| 36 | return ( |
| 37 | <div className="result-get-node"> |
| 38 | <div |
| 39 | className="result-get-node-header" |
| 40 | onClick={() => onNodeSelect?.(node.id)} |
| 41 | > |
| 42 | <span className="result-type-badge" style={{ background: color }}> |
| 43 | {node.type} |
| 44 | </span> |
| 45 | <span className="result-node-name">{node.name}</span> |
| 46 | </div> |
| 47 | <div className="result-node-id">{node.id}</div> |
| 48 | {props.length > 0 && ( |
| 49 | <div className="result-props-table"> |
| 50 | {props.map(([key, value]) => ( |
| 51 | <Fragment key={key}> |
| 52 | <span className="result-props-key">{key}</span> |
| 53 | <span className="result-props-value">{String(value)}</span> |
| 54 | </Fragment> |
| 55 | ))} |
| 56 | </div> |
| 57 | )} |
| 58 | </div> |
| 59 | ); |
| 60 | } |
nothing calls this directly
no test coverage detected