import { memo } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; // eslint-disable-next-line import/no-extraneous-dependencies import { Handle, Position } from '@xyflow/react'; type NodeData = { nodeId?: string; label: string; level: 'L1' | 'L2' | 'L3' | 'NOT_SET'; editUrl?: string; isCandidate?: boolean; orderMode?: 'normal' | 'reverse'; orderEnabled?: boolean; l3Side?: 'top' | 'bottom'; onConfigure?: () => void; }; function TopicClusterNode( { data }: { data: NodeData } ) { const hierarchyHandleClass = '!h-3.5 !w-3.5 !border-2 !border-white !bg-black !shadow-[0_0_0_1px_rgba(15,23,42,0.45)]'; const prevHandleClass = '!h-3.5 !w-3.5 !border-2 !border-white !bg-green-500 !shadow-[0_0_0_1px_rgba(15,23,42,0.45)]'; const nextHandleClass = '!h-3.5 !w-3.5 !border-2 !border-white !bg-blue-500 !shadow-[0_0_0_1px_rgba(15,23,42,0.45)]'; const levelColors = { L1: 'bg-blue-100 border-blue-400', L2: 'bg-green-100 border-green-400', L3: 'bg-purple-100 border-purple-400', NOT_SET: 'bg-amber-50 border-amber-300', }; const levelLabels = { L1: '🎯 Pillar', L2: '📦 Cluster', L3: '📄 Support', NOT_SET: '⚪ Not set', }; const hideTopHandles = 'L3' === data.level && 'top' === data.l3Side; const hideBottomHandles = 'L3' === data.level && 'bottom' === data.l3Side; let renderOrderHandles = null; if ( 'L1' !== data.level && data.orderEnabled ) { if ( 'reverse' === data.orderMode ) { renderOrderHandles = ( <> ); } else { renderOrderHandles = ( <> ); } } return (
{ levelLabels[ data.level ].split( ' ' )[ 0 ] }
{ data.label }
{ levelLabels[ data.level ].split( ' ' )[ 1 ] }
{ data.isCandidate && data.onConfigure ? ( ) : null }
{ ! hideTopHandles ? ( <> ) : null } { ! hideBottomHandles ? ( <> ) : null } { renderOrderHandles }
); } export default memo( TopicClusterNode );