| 
                        1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | 
                        - import {
 -   memo,
 -   useCallback,
 - } from 'react'
 - import {
 -   RiAddLine,
 - } from '@remixicon/react'
 - import { useTranslation } from 'react-i18next'
 - import {
 -   useAvailableBlocks,
 -   useNodesInteractions,
 -   useNodesReadOnly,
 - } from '../../hooks'
 - import type { LoopNodeType } from './types'
 - import cn from '@/utils/classnames'
 - import BlockSelector from '@/app/components/workflow/block-selector'
 - 
 - import type {
 -   OnSelectBlock,
 - } from '@/app/components/workflow/types'
 - import {
 -   BlockEnum,
 - } from '@/app/components/workflow/types'
 - 
 - type AddBlockProps = {
 -   loopNodeId: string
 -   loopNodeData: LoopNodeType
 - }
 - const AddBlock = ({
 -   loopNodeData,
 - }: AddBlockProps) => {
 -   const { t } = useTranslation()
 -   const { nodesReadOnly } = useNodesReadOnly()
 -   const { handleNodeAdd } = useNodesInteractions()
 -   const { availableNextBlocks } = useAvailableBlocks(BlockEnum.Start, false, true)
 - 
 -   const handleSelect = useCallback<OnSelectBlock>((type, toolDefaultValue) => {
 -     handleNodeAdd(
 -       {
 -         nodeType: type,
 -         toolDefaultValue,
 -       },
 -       {
 -         prevNodeId: loopNodeData.start_node_id,
 -         prevNodeSourceHandle: 'source',
 -       },
 -     )
 -   }, [handleNodeAdd, loopNodeData.start_node_id])
 - 
 -   const renderTriggerElement = useCallback((open: boolean) => {
 -     return (
 -       <div className={cn(
 -         'relative inline-flex items-center px-3 h-8 rounded-lg border-[0.5px] border-gray-50 bg-white shadow-xs cursor-pointer hover:bg-gray-200 text-[13px] font-medium text-gray-700',
 -         `${nodesReadOnly && '!cursor-not-allowed opacity-50'}`,
 -         open && '!bg-gray-50',
 -       )}>
 -         <RiAddLine className='mr-1 w-4 h-4' />
 -         {t('workflow.common.addBlock')}
 -       </div>
 -     )
 -   }, [nodesReadOnly, t])
 - 
 -   return (
 -     <div className='absolute top-7 left-14 flex items-center h-8 z-10'>
 -       <div className='group/insert relative w-16 h-0.5 bg-gray-300'>
 -         <div className='absolute right-0 top-1/2 -translate-y-1/2 w-0.5 h-2 bg-primary-500'></div>
 -       </div>
 -       <BlockSelector
 -         disabled={nodesReadOnly}
 -         onSelect={handleSelect}
 -         trigger={renderTriggerElement}
 -         triggerInnerClassName='inline-flex'
 -         popupClassName='!min-w-[256px]'
 -         availableBlocksTypes={availableNextBlocks}
 -       />
 -     </div>
 -   )
 - }
 - 
 - export default memo(AddBlock)
 
 
  |