From 2e5acef1b66d0e615573d7eac7ba6a7ec30424af Mon Sep 17 00:00:00 2001 From: StyleZhang Date: Wed, 20 Mar 2024 16:41:45 +0800 Subject: [PATCH] fix --- .../workflow/block-selector/index.tsx | 6 +++- .../nodes/_base/components/next-step/add.tsx | 6 +++- .../nodes/_base/components/next-step/item.tsx | 28 +++++++++++-------- .../panel-operator/change-block.tsx | 12 +++++++- .../_base/components/panel-operator/index.tsx | 6 ++-- 5 files changed, 42 insertions(+), 16 deletions(-) diff --git a/web/app/components/workflow/block-selector/index.tsx b/web/app/components/workflow/block-selector/index.tsx index b742f5f1c3..7717bfd68a 100644 --- a/web/app/components/workflow/block-selector/index.tsx +++ b/web/app/components/workflow/block-selector/index.tsx @@ -37,6 +37,7 @@ type NodeSelectorProps = { popupClassName?: string asChild?: boolean availableBlocksTypes?: BlockEnum[] + disabled?: boolean } const NodeSelector: FC = ({ open: openFromProps, @@ -50,6 +51,7 @@ const NodeSelector: FC = ({ popupClassName, asChild, availableBlocksTypes, + disabled, }) => { const { t } = useTranslation() const [searchText, setSearchText] = useState('') @@ -62,9 +64,11 @@ const NodeSelector: FC = ({ onOpenChange(newOpen) }, [onOpenChange]) const handleTrigger = useCallback>((e) => { + if (disabled) + return e.stopPropagation() handleOpenChange(!open) - }, [handleOpenChange, open]) + }, [handleOpenChange, open, disabled]) const handleSelect = useCallback((type, toolDefaultValue) => { handleOpenChange(false) onSelect(type, toolDefaultValue) diff --git a/web/app/components/workflow/nodes/_base/components/next-step/add.tsx b/web/app/components/workflow/nodes/_base/components/next-step/add.tsx index 6691d0c2ed..1aa796b7e7 100644 --- a/web/app/components/workflow/nodes/_base/components/next-step/add.tsx +++ b/web/app/components/workflow/nodes/_base/components/next-step/add.tsx @@ -6,6 +6,7 @@ import { useTranslation } from 'react-i18next' import { useNodesExtraData, useNodesInteractions, + useNodesReadOnly, } from '@/app/components/workflow/hooks' import BlockSelector from '@/app/components/workflow/block-selector' import { Plus } from '@/app/components/base/icons/src/vender/line/general' @@ -29,6 +30,7 @@ const Add = ({ const { t } = useTranslation() const { handleNodeAdd } = useNodesInteractions() const nodesExtraData = useNodesExtraData() + const { nodesReadOnly } = useNodesReadOnly() const availableNextNodes = nodesExtraData[nodeType].availableNextNodes const handleSelect = useCallback((type, toolDefaultValue) => { @@ -51,6 +53,7 @@ const Add = ({ relative flex items-center px-2 w-[328px] h-9 rounded-lg border border-dashed border-gray-200 bg-gray-50 hover:bg-gray-100 text-xs text-gray-500 cursor-pointer ${open && '!bg-gray-100'} + ${nodesReadOnly && '!cursor-not-allowed'} `} > { @@ -69,10 +72,11 @@ const Add = ({ {t('workflow.panel.selectNextStep')} ) - }, [branchName, t]) + }, [branchName, t, nodesReadOnly]) return ( { const { t } = useTranslation() const { handleNodeChange } = useNodesInteractions() + const { nodesReadOnly } = useNodesReadOnly() const nodesExtraData = useNodesExtraData() const toolsets = useStore(s => s.toolsets) const toolIcon = useMemo(() => { @@ -77,17 +79,21 @@ const Item = ({ className='shrink-0 mr-1.5' />
{data.title}
- + { + !nodesReadOnly && ( + + ) + } ) } diff --git a/web/app/components/workflow/nodes/_base/components/panel-operator/change-block.tsx b/web/app/components/workflow/nodes/_base/components/panel-operator/change-block.tsx index 883c8eabbf..52f4687a41 100644 --- a/web/app/components/workflow/nodes/_base/components/panel-operator/change-block.tsx +++ b/web/app/components/workflow/nodes/_base/components/panel-operator/change-block.tsx @@ -1,6 +1,7 @@ import { memo, useCallback, + useMemo, } from 'react' import { useTranslation } from 'react-i18next' import { intersection } from 'lodash-es' @@ -30,6 +31,15 @@ const ChangeBlock = ({ const availablePrevNodes = nodesExtraData[nodeType].availablePrevNodes const availableNextNodes = nodesExtraData[nodeType].availableNextNodes + const availableNodes = useMemo(() => { + if (availableNextNodes.length && availableNextNodes.length) + return intersection(availablePrevNodes, availableNextNodes) + else if (availablePrevNodes.length) + return availablePrevNodes + else + return availableNextNodes + }, [availablePrevNodes, availableNextNodes]) + const handleSelect = useCallback((type, toolDefaultValue) => { handleNodeChange(nodeId, type, sourceHandle, toolDefaultValue) }, [handleNodeChange, nodeId, sourceHandle]) @@ -51,7 +61,7 @@ const ChangeBlock = ({ }} onSelect={handleSelect} trigger={renderTrigger} - availableBlocksTypes={intersection(availablePrevNodes, availableNextNodes)} + availableBlocksTypes={availableNodes} /> ) } diff --git a/web/app/components/workflow/nodes/_base/components/panel-operator/index.tsx b/web/app/components/workflow/nodes/_base/components/panel-operator/index.tsx index c00a986e91..29f2d0750a 100644 --- a/web/app/components/workflow/nodes/_base/components/panel-operator/index.tsx +++ b/web/app/components/workflow/nodes/_base/components/panel-operator/index.tsx @@ -15,6 +15,7 @@ import { useStore } from '@/app/components/workflow/store' import { useNodesExtraData, useNodesInteractions, + useNodesReadOnly, } from '@/app/components/workflow/hooks' import { DotsHorizontal } from '@/app/components/base/icons/src/vender/line/general' import { @@ -53,6 +54,7 @@ const PanelOperator = ({ const language = getLanguage(locale) const edges = useEdges() const { handleNodeDelete } = useNodesInteractions() + const { nodesReadOnly } = useNodesReadOnly() const nodesExtraData = useNodesExtraData() const toolsets = useStore(s => s.toolsets) const toolsMap = useStore(s => s.toolsMap) @@ -126,7 +128,7 @@ const PanelOperator = ({
{ - data.type !== BlockEnum.Start && ( + data.type !== BlockEnum.Start && !nodesReadOnly && (
{ - data.type !== BlockEnum.Start && ( + data.type !== BlockEnum.Start && !nodesReadOnly && ( <>