import type { FC, ReactElement, } from 'react' import { cloneElement, memo, useCallback, useMemo, } from 'react' import type { NodeProps } from 'reactflow' import { getOutgoers } from 'reactflow' import { useWorkflowContext } from '../../context' import BlockSelector from '../../block-selector' import BlockIcon from '../../block-icon' import { Plus } from '@/app/components/base/icons/src/vender/line/general' type BaseNodeProps = { children: ReactElement } & Pick const BaseNode: FC = ({ id: nodeId, data, children, }) => { const { nodes, edges, selectedNodeId, handleSelectedNodeIdChange, } = useWorkflowContext() const currentNode = useMemo(() => { return nodes.find(node => node.id === nodeId) }, [nodeId, nodes]) const outgoers = useMemo(() => { return getOutgoers(currentNode!, nodes, edges) }, [currentNode, nodes, edges]) const renderBlockSelectorChildren = useCallback(({ open, ref, ...restProps }: any) => { return (
e.stopPropagation()}>
) }, []) return (
handleSelectedNodeIdChange(nodeId || '')} >
{data.title}
{cloneElement(children, { id: nodeId, data })}
Define the initial parameters for launching a workflow
{ !outgoers.length && ( {renderBlockSelectorChildren} ) }
) } export default memo(BaseNode)