| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 | 
                        - 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<SimpleNodeProps> = ({
 -   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 (
 -     <div
 -       className={cn(
 -         'flex rounded-2xl border-[2px]',
 -         showSelectedBorder ? 'border-components-option-card-option-selected-border' : 'border-transparent',
 -         !showSelectedBorder && data._inParallelHovering && 'border-workflow-block-border-highlight',
 -         data._waitingRun && 'opacity-70',
 -       )}
 -       style={{
 -         width: 'auto',
 -         height: 'auto',
 -       }}
 -     >
 -       <div
 -         className={cn(
 -           'group relative pb-1 shadow-xs',
 -           'rounded-[15px] border border-transparent',
 -           'w-[240px] bg-workflow-block-bg',
 -           !data._runningStatus && 'hover:shadow-lg',
 -           showRunningBorder && '!border-state-accent-solid',
 -           showSuccessBorder && '!border-state-success-solid',
 -           showFailedBorder && '!border-state-destructive-solid',
 -           showExceptionBorder && '!border-state-warning-solid',
 -           data._isBundled && '!shadow-lg',
 -         )}
 -       >
 -         {
 -           data._inParallelHovering && (
 -             <div className='top system-2xs-medium-uppercase absolute -top-2.5 left-2 z-10 text-text-tertiary'>
 -               {t('workflow.common.parallelRun')}
 -             </div>
 -           )
 -         }
 -         {
 -           !data._isCandidate && (
 -             <NodeTargetHandle
 -               id={id}
 -               data={data}
 -               handleClassName='!top-4 !-left-[9px] !translate-y-0'
 -               handleId='target'
 -             />
 -           )
 -         }
 -         {
 -           !data._runningStatus && !nodesReadOnly && !data._isCandidate && (
 -             <NodeControl
 -               id={id}
 -               data={data}
 -             />
 -           )
 -         }
 -         <div className={cn(
 -           'flex items-center rounded-t-2xl px-3 pb-2 pt-3',
 -         )}>
 -           <BlockIcon
 -             className='mr-2 shrink-0'
 -             type={data.type}
 -             size='md'
 -           />
 -           <div
 -             title={data.title}
 -             className='system-sm-semibold-uppercase mr-1 flex grow items-center truncate text-text-primary'
 -           >
 -             <div>
 -               {data.title}
 -             </div>
 -           </div>
 -           {
 -             (data._runningStatus === NodeRunningStatus.Running || data._singleRunningStatus === NodeRunningStatus.Running) && (
 -               <RiLoader2Line className='h-3.5 w-3.5 animate-spin text-text-accent' />
 -             )
 -           }
 -           {
 -             data._runningStatus === NodeRunningStatus.Succeeded && (
 -               <RiCheckboxCircleFill className='h-3.5 w-3.5 text-text-success' />
 -             )
 -           }
 -           {
 -             data._runningStatus === NodeRunningStatus.Failed && (
 -               <RiErrorWarningFill className='h-3.5 w-3.5 text-text-destructive' />
 -             )
 -           }
 -           {
 -             data._runningStatus === NodeRunningStatus.Exception && (
 -               <RiAlertFill className='h-3.5 w-3.5 text-text-warning-secondary' />
 -             )
 -           }
 -         </div>
 -       </div>
 -     </div>
 -   )
 - }
 - 
 - export default memo(SimpleNode)
 
 
  |