import type { FC, ReactElement, } from 'react' import { cloneElement, memo, useMemo, } from 'react' import type { NodeProps } from '../../types' import { BlockEnum, NodeRunningStatus, } from '../../types' import { useStore } from '../../store' import { NodeSourceHandle, NodeTargetHandle, } from './components/node-handle' import NodeControl from './components/node-control' import BlockIcon from '@/app/components/workflow/block-icon' import { CheckCircle, Loading02, } from '@/app/components/base/icons/src/vender/line/general' import { AlertCircle } from '@/app/components/base/icons/src/vender/line/alertsAndFeedback' type BaseNodeProps = { children: ReactElement } & NodeProps const BaseNode: FC = ({ id, data, children, }) => { const toolsets = useStore(s => s.toolsets) const toolIcon = useMemo(() => { if (data.type === BlockEnum.Tool) return toolsets.find(toolset => toolset.id === data.provider_id)?.icon }, [data, toolsets]) return (
{ data.type !== BlockEnum.VariableAssigner && !data._runningStatus && ( ) } { data.type !== BlockEnum.IfElse && data.type !== BlockEnum.QuestionClassifier && !data._runningStatus && ( ) } { !data._runningStatus && ( ) }
{data.title}
{ (data._runningStatus === NodeRunningStatus.Running || data._singleRunningStatus === NodeRunningStatus.Running) && ( ) } { data._runningStatus === NodeRunningStatus.Succeeded && ( ) } { data._runningStatus === NodeRunningStatus.Failed && ( ) }
{cloneElement(children, { id, data })}
{ data.desc && (
{data.desc}
) }
) } export default memo(BaseNode)