import { memo, useEffect, useState, } from 'react' import { useTranslation } from 'react-i18next' import { COMMAND_PRIORITY_EDITOR, } from 'lexical' import { mergeRegister } from '@lexical/utils' import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext' import cn from 'classnames' import { RiErrorWarningFill, } from '@remixicon/react' import { useSelectOrDelete } from '../../hooks' import type { WorkflowNodesMap } from './node' import { WorkflowVariableBlockNode } from './node' import { DELETE_WORKFLOW_VARIABLE_BLOCK_COMMAND, UPDATE_WORKFLOW_NODES_MAP, } from './index' import { Variable02 } from '@/app/components/base/icons/src/vender/solid/development' import { VarBlockIcon } from '@/app/components/workflow/block-icon' import { Line3 } from '@/app/components/base/icons/src/public/common' import { isSystemVar } from '@/app/components/workflow/nodes/_base/components/variable/utils' import TooltipPlus from '@/app/components/base/tooltip-plus' type WorkflowVariableBlockComponentProps = { nodeKey: string variables: string[] workflowNodesMap: WorkflowNodesMap } const WorkflowVariableBlockComponent = ({ nodeKey, variables, workflowNodesMap = {}, }: WorkflowVariableBlockComponentProps) => { const { t } = useTranslation() const [editor] = useLexicalComposerContext() const [ref, isSelected] = useSelectOrDelete(nodeKey, DELETE_WORKFLOW_VARIABLE_BLOCK_COMMAND) const variablesLength = variables.length const varName = ( () => { const isSystem = isSystemVar(variables) const varName = variablesLength >= 3 ? (variables).slice(-2).join('.') : variables[variablesLength - 1] return `${isSystem ? 'sys.' : ''}${varName}` } )() const [localWorkflowNodesMap, setLocalWorkflowNodesMap] = useState(workflowNodesMap) const node = localWorkflowNodesMap![variables[0]] useEffect(() => { if (!editor.hasNodes([WorkflowVariableBlockNode])) throw new Error('WorkflowVariableBlockPlugin: WorkflowVariableBlock not registered on editor') return mergeRegister( editor.registerCommand( UPDATE_WORKFLOW_NODES_MAP, (workflowNodesMap: WorkflowNodesMap) => { setLocalWorkflowNodesMap(workflowNodesMap) return true }, COMMAND_PRIORITY_EDITOR, ), ) }, [editor]) const Item = (
{ node?.type && (
) }
{node?.title}
{varName}
{ !node && ( ) }
) if (!node) { return ( {Item} ) } return Item } export default memo(WorkflowVariableBlockComponent)