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