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

This commit is contained in:
edo1z
2024-08-23 14:16:15 +09:00
committed by GitHub
parent 9618f86980
commit 0a7ab9a47d
2 changed files with 21 additions and 11 deletions

View File

@@ -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])