diff --git a/web/app/components/workflow/index.tsx b/web/app/components/workflow/index.tsx index d96faa8677..63e55ebfb2 100644 --- a/web/app/components/workflow/index.tsx +++ b/web/app/components/workflow/index.tsx @@ -239,8 +239,8 @@ const Workflow: FC = memo(({ handleSelectionDrag, } = useSelectionInteractions() const { - handlePaneContextMenu, - handlePaneContextmenuCancel, + handlePanelContextMenu, + handlePanelContextmenuCancel, } = usePanelInteractions() const { isValidConnection, @@ -304,7 +304,7 @@ const Workflow: FC = memo(({ setShowImportDSLModal(false)} onBackup={exportCheck} - onImport={handlePaneContextmenuCancel} + onImport={handlePanelContextmenuCancel} /> ) } @@ -338,7 +338,7 @@ const Workflow: FC = memo(({ onSelectionStart={handleSelectionStart} onSelectionChange={handleSelectionChange} onSelectionDrag={handleSelectionDrag} - onPaneContextMenu={handlePaneContextMenu} + onPaneContextMenu={handlePanelContextMenu} connectionLineComponent={CustomConnectionLine} connectionLineContainerStyle={{ zIndex: ITERATION_CHILDREN_Z_INDEX }} defaultViewport={viewport} diff --git a/web/app/components/workflow/operator/add-block.tsx b/web/app/components/workflow/operator/add-block.tsx index 4dc7bd6a7f..a9a214767f 100644 --- a/web/app/components/workflow/operator/add-block.tsx +++ b/web/app/components/workflow/operator/add-block.tsx @@ -1,14 +1,9 @@ -import { - memo, - useCallback, -} from 'react' +import React, { memo, useCallback, useEffect, useState } from 'react' import { RiAddCircleFill } from '@remixicon/react' import { useStoreApi } from 'reactflow' import { useTranslation } from 'react-i18next' import type { OffsetOptions } from '@floating-ui/react' -import { - generateNewNode, -} from '../utils' +import { generateNewNode } from '../utils' import { useAvailableBlocks, useNodesReadOnly, @@ -19,20 +14,19 @@ import { useStore, useWorkflowStore } from '../store' import TipPopup from './tip-popup' 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' +import type { OnSelectBlock } from '@/app/components/workflow/types' +import { BlockEnum } from '@/app/components/workflow/types' type AddBlockProps = { renderTrigger?: (open: boolean) => React.ReactNode offset?: OffsetOptions + useShortcut?: boolean } + const AddBlock = ({ renderTrigger, offset, + useShortcut = false, }: AddBlockProps) => { const { t } = useTranslation() const store = useStoreApi() @@ -44,16 +38,24 @@ const AddBlock = ({ const showAddBlock = useStore(state => state.showAddBlock) const setShowAddBlock = useStore(state => state.setShowAddBlock) + const [isOpen, setIsOpen] = useState(false) + + useEffect(() => { + if (useShortcut && showAddBlock) + setIsOpen(true) + }, [useShortcut, showAddBlock]) + const handleOpenChange = useCallback((open: boolean) => { - setShowAddBlock(open) + setIsOpen(open) + if (useShortcut) + setShowAddBlock(open) + if (!open) handlePanelContextmenuCancel() - }, [setShowAddBlock, handlePanelContextmenuCancel]) + }, [useShortcut, setShowAddBlock, handlePanelContextmenuCancel]) const handleSelect = useCallback((type, toolDefaultValue) => { - const { - getNodes, - } = store.getState() + const { getNodes } = store.getState() const nodes = getNodes() const nodesWithSameType = nodes.filter(node => node.data.type === type) const newNode = generateNewNode({ @@ -68,16 +70,12 @@ const AddBlock = ({ y: 0, }, }) - workflowStore.setState({ - candidateNode: newNode, - }) + workflowStore.setState({ candidateNode: newNode }) }, [store, workflowStore, t]) const renderTriggerElement = useCallback((open: boolean) => { return ( - +
{ return (
- +
{ mainAxis: -36, crossAxis: -4, }} + useShortcut={false} />