import { PlusOutlined } from '@ant-design/icons'; import { Handle } from '@xyflow/react'; import { Tooltip } from 'antd'; import classNames from 'classnames'; import React, { ComponentProps, memo, useContext, useEffect, useMemo, useRef, useState } from 'react'; import NodeSelectPopover from '../NodesPopover'; import { ConfigContext } from '../../models/context'; import './index.less'; export type HandleProps = ComponentProps export default memo((props:Partial & Record ) => { const { position, isConnectable, selected, isHovered, handleAddNode, switchTitle, isConnected, // 是否有连接的节点 nodeType, ...rest } = props; const [isShowTooltip, setIsShowTooltip] = useState(false); const [openNodeSelectPopover, setOpenNodeSelectPopover] = useState(false); const popoverRef = useRef(null); const { antdVersion, globalConfig } = useContext(ConfigContext); const handleProps = globalConfig?.handle || {}; const toolTipVersionProps = useMemo(() => { if (antdVersion === 'V5') { return { open: isShowTooltip, }; } // V4 return { visible: isShowTooltip, }; }, [isShowTooltip]); return ( { if(handleProps.isValidConnection){ return handleProps.isValidConnection(edge,'source',nodeType) } return true }} type="source" position={position} isConnectable={isConnectable} onMouseEnter={() => setIsShowTooltip(true)} onMouseLeave={() => setIsShowTooltip(false)} onClick={e => { e.stopPropagation(); popoverRef?.current?.changeOpen(true); setIsShowTooltip(false); setOpenNodeSelectPopover(true); }} {...rest} className={classNames( { 'handle-disconnected': !isConnected, }, rest.className )} > {(selected || isHovered || openNodeSelectPopover) && ( <> {switchTitle && (
{switchTitle}
)} {isConnectable && (
setOpenNodeSelectPopover(val)} nodeType={nodeType} > document.getElementById('xflow-container') as HTMLElement } >
)} )}
); });