import React from 'react';
import styles from '@/pages/flowEditor/node/style/base.module.less';
import { Handle, Position, useStore } from '@xyflow/react';
import { Divider } from '@arco-design/web-react';
interface NodeContentData {
parameters?: {
inputs?: any[];
outputs?: any[];
};
showFooter?: boolean;
type?: string;
[key: string]: any;
}
// 渲染特殊节点(开始/结束节点)的句柄
const renderSpecialNodeHandles = (isStartNode: boolean, isEndNode: boolean, inputs: any[], outputs: any[]) => {
return (
<>
{/* 为特殊节点的参数也添加句柄 */}
{isStartNode && outputs.map((_, index) => (
))}
{isEndNode && inputs.map((_, index) => (
))}
>
);
};
// 渲染普通节点的句柄
const renderRegularNodeHandles = (inputs: any[], outputs: any[]) => {
return (
<>
{/* 输入参数连接端点 */}
{inputs.map((_, index) => (
))}
{/* 输出参数连接端点 */}
{outputs.map((_, index) => (
))}
>
);
};
const NodeContent = ({ data }: { data: NodeContentData }) => {
const inputs = data.parameters?.inputs || [];
const outputs = data.parameters?.outputs || [];
const showFooter = data.showFooter || false;
// 判断节点类型
const isStartNode = data.type === 'start';
const isEndNode = data.type === 'end';
const isSpecialNode = isStartNode || isEndNode;
return (
<>
{/*content栏*/}
{inputs.length > 0 && !isStartNode && (
{inputs.map((input, index) => (
{input.name || `输入${index + 1}`}
))}
)}
{outputs.length > 0 && !isEndNode && (
{outputs.map((output, index) => (
{output.name || `输出${index + 1}`}
))}
)}
{/*footer栏*/}
{showFooter && (
暂定的footer
)}
{/* 根据节点类型渲染不同的句柄 */}
{isSpecialNode
? renderSpecialNodeHandles(isStartNode, isEndNode, inputs, outputs)
: renderRegularNodeHandles(inputs, outputs)}
>
);
};
export default NodeContent;