瀏覽代碼

fix: incorrect duplication when no target node is selected (#7539)

tags/0.7.2
edo1z 1 年之前
父節點
當前提交
0a7ab9a47d
沒有連結到貢獻者的電子郵件帳戶。

+ 20
- 10
web/app/components/workflow/hooks/use-nodes-interactions.ts 查看文件

@@ -1027,7 +1027,7 @@ export const useNodesInteractions = () => {
handleNodeSelect(node.id)
}, [workflowStore, handleNodeSelect])

const handleNodesCopy = useCallback(() => {
const handleNodesCopy = useCallback((nodeId?: string) => {
if (getNodesReadOnly())
return

@@ -1038,17 +1038,27 @@ export const useNodesInteractions = () => {
} = store.getState()

const nodes = getNodes()
const bundledNodes = nodes.filter(node => node.data._isBundled && node.data.type !== BlockEnum.Start && !node.data.isInIteration)

if (bundledNodes.length) {
setClipboardElements(bundledNodes)
return
if (nodeId) {
// If nodeId is provided, copy that specific node
const nodeToCopy = nodes.find(node => node.id === nodeId && node.data.type !== BlockEnum.Start)
if (nodeToCopy)
setClipboardElements([nodeToCopy])
}
else {
// If no nodeId is provided, fall back to the current behavior
const bundledNodes = nodes.filter(node => node.data._isBundled && node.data.type !== BlockEnum.Start && !node.data.isInIteration)

const selectedNode = nodes.find(node => node.data.selected && node.data.type !== BlockEnum.Start)
if (bundledNodes.length) {
setClipboardElements(bundledNodes)
return
}

if (selectedNode)
setClipboardElements([selectedNode])
const selectedNode = nodes.find(node => node.data.selected && node.data.type !== BlockEnum.Start)

if (selectedNode)
setClipboardElements([selectedNode])
}
}, [getNodesReadOnly, store, workflowStore])

const handleNodesPaste = useCallback(() => {
@@ -1128,11 +1138,11 @@ export const useNodesInteractions = () => {
}
}, [getNodesReadOnly, workflowStore, store, reactflow, saveStateToHistory, handleSyncWorkflowDraft, handleNodeIterationChildrenCopy])

const handleNodesDuplicate = useCallback(() => {
const handleNodesDuplicate = useCallback((nodeId?: string) => {
if (getNodesReadOnly())
return

handleNodesCopy()
handleNodesCopy(nodeId)
handleNodesPaste()
}, [getNodesReadOnly, handleNodesCopy, handleNodesPaste])


+ 1
- 1
web/app/components/workflow/nodes/_base/components/panel-operator/panel-operator-popup.tsx 查看文件

@@ -138,7 +138,7 @@ const PanelOperatorPopup = ({
className='flex items-center justify-between px-3 h-8 text-sm text-gray-700 rounded-lg cursor-pointer hover:bg-gray-50'
onClick={() => {
onClosePopup()
handleNodesDuplicate()
handleNodesDuplicate(id)
}}
>
{t('workflow.common.duplicate')}

Loading…
取消
儲存