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 { BlockEnum } from '../../types' import NodeControl from '../../node-control' import BlockIcon from '../../block-icon' import AddNode from './components/add-node/index' type BaseNodeProps = { children: ReactElement } & Pick const BaseNode: FC = ({ id: nodeId, data, children, }) => { const { nodes, edges, selectedNodeId, handleSelectedNodeIdChange, handleAddNextNode, } = 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 handleSelectBlock = useCallback((type: BlockEnum) => { handleAddNextNode(currentNode!, type) }, [currentNode, handleAddNextNode]) const branches = useMemo(() => { if (data.type === BlockEnum.IfElse) { return [ { id: '1', name: 'Is True', }, { id: '2', name: 'Is False', }, ] } }, [data]) return (
handleSelectedNodeIdChange(nodeId || '')} >
{data.title}
{cloneElement(children, { id: nodeId, data })}
Define the initial parameters for launching a workflow
) } export default memo(BaseNode)