import type { FC } from 'react' import type { NodeProps } from '@/app/components/workflow/types' import { cn } from '@langgenius/dify-ui/cn' import { RiAlertFill, RiCheckboxCircleFill, RiErrorWarningFill, RiLoader2Line, } from '@remixicon/react' import { memo, useMemo } from 'react' import BlockIcon from '@/app/components/workflow/block-icon' import { useNodesReadOnly } from '@/app/components/workflow/hooks' import NodeControl from '@/app/components/workflow/nodes/_base/components/node-control' import { NodeTargetHandle } from '@/app/components/workflow/nodes/_base/components/node-handle' import { NodeRunningStatus } from '@/app/components/workflow/types' type SimpleNodeProps = NodeProps const SimpleNode: FC = ({ id, data }) => { const { nodesReadOnly } = useNodesReadOnly() const showSelectedBorder = data.selected || data._isBundled || data._isEntering const { showRunningBorder, showSuccessBorder, showFailedBorder, showExceptionBorder } = useMemo(() => { return { showRunningBorder: data._runningStatus === NodeRunningStatus.Running && !showSelectedBorder, showSuccessBorder: data._runningStatus === NodeRunningStatus.Succeeded && !showSelectedBorder, showFailedBorder: data._runningStatus === NodeRunningStatus.Failed && !showSelectedBorder, showExceptionBorder: data._runningStatus === NodeRunningStatus.Exception && !showSelectedBorder, } }, [data._runningStatus, showSelectedBorder]) return (
{!data._isCandidate && ( )} {!data._runningStatus && !nodesReadOnly && !data._isCandidate && ( )}
{data.title}
{(data._runningStatus === NodeRunningStatus.Running || data._singleRunningStatus === NodeRunningStatus.Running) && ( )} {data._runningStatus === NodeRunningStatus.Succeeded && ( )} {data._runningStatus === NodeRunningStatus.Failed && ( )} {data._runningStatus === NodeRunningStatus.Exception && ( )}
) } export default memo(SimpleNode)