x-render / packages /x-flow /src /nodes /node-parallel /ParallelBuildInNodeWidget.tsx
AbdulElahGwaith's picture
Upload folder using huggingface_hub
c9d0005 verified
Raw
History Blame Contribute Delete
3.47 kB
import { Space } from 'antd';
import classNames from 'classnames';
import React, { memo } from 'react';
import { shallow } from 'zustand/shallow';
import SourceHandle from '../../components/CustomNode/sourceHandle';
import TextEllipsis from '../../components/TextEllipsis';
import { useStore } from '../../hooks/useStore';
import { uuid } from '../../utils';
import './index.less';
export default memo((props: any) => {
const {
data,
position,
isConnectable,
selected,
isHovered,
handleAddNode,
CustomNodeWidget,
isSwitchBottom,
nodeSetting,
} = props;
const { parallelExtra } = nodeSetting;
const { nodes, edges } = useStore(
(state: any) => ({
nodes: state.nodes,
edges: state.edges,
mousePosition: state.mousePosition,
addNodes: state.addNodes,
addEdges: state.addEdges,
onEdgesChange: state.onEdgesChange,
}),
shallow
);
const renderTitle = (item, index) => {
const defTitle = item?.title || `事件${index}`;
const title = parallelExtra?.titleKey
? item[parallelExtra?.titleKey]
: defTitle;
return (
<div className="item-header">
<div className="item-title">
{title && (
<TextEllipsis
text={title}
// rows={1}
// type="paragraph"
className="item-content-in"
/>
)}
</div>
<SourceHandle
position={position}
isConnectable={
(edges || [])?.filter(flow => flow?.sourceHandle === item?._id)
?.length === 0
}
selected={selected}
isHovered={isHovered}
handleAddNode={data => {
handleAddNode(data, item?._id);
}}
id={item?._id}
className="item-handle"
isConnected={
(edges || [])?.filter(flow => flow?.sourceHandle === item?._id)
?.length > 0
}
nodeType={'Parallel'}
/>
</div>
);
};
const renderContent = (item, index) => {
const value = parallelExtra?.valueKey
? item[parallelExtra?.valueKey]
: item?.value;
return (
<div className="item-content">
{CustomNodeWidget ? (
<CustomNodeWidget data={item} index={index} />
) : (
<div>
{value && (
<div className="item-content-in">
<TextEllipsis text={value} rows={5} type="paragraph" />
</div>
)}
</div>
)}
</div>
);
};
return (
<Space
direction={isSwitchBottom ? 'horizontal' : 'vertical'}
className={classNames('node-parallel-widget', {
'node-parallel-widget-bottom': isSwitchBottom,
})}
size={5}
>
{(data?.list || [{ _id: `id_${uuid()}` }, { _id: `id_${uuid()}` }])?.map(
(item, index) => (
<div
className={classNames('node-parallel-widget-item', {
'node-parallel-bottom-item': isSwitchBottom,
})}
key={index}
>
{isSwitchBottom ? (
<>
{renderContent(item, index)}
{renderTitle(item, index)}
</>
) : (
<>
{renderTitle(item, index)}
{renderContent(item, index)}
</>
)}
</div>
)
)}
</Space>
);
});