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