import type { FC, } from 'react' import { memo, useMemo, } from 'react' import { RiAlertFill, RiCheckboxCircleFill, RiErrorWarningFill, RiLoader2Line, } from '@remixicon/react' import { useTranslation } from 'react-i18next' import { NodeTargetHandle, } from '@/app/components/workflow/nodes/_base/components/node-handle' import NodeControl from '@/app/components/workflow/nodes/_base/components/node-control' import cn from '@/utils/classnames' import BlockIcon from '@/app/components/workflow/block-icon' import type { NodeProps, } from '@/app/components/workflow/types' import { NodeRunningStatus, } from '@/app/components/workflow/types' import { useNodesReadOnly, } from '@/app/components/workflow/hooks' type SimpleNodeProps = NodeProps const SimpleNode: FC = ({ id, data, }) => { const { t } = useTranslation() 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._inParallelHovering && (
{t('workflow.common.parallelRun')}
) } { !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)