Skip to content

Commit

Permalink
fix: incorrect duplication when no target node is selected (#7539)
Browse files Browse the repository at this point in the history
  • Loading branch information
edo1z authored Aug 23, 2024
1 parent 9618f86 commit 0a7ab9a
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 11 deletions.
30 changes: 20 additions & 10 deletions web/app/components/workflow/hooks/use-nodes-interactions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1027,7 +1027,7 @@ export const useNodesInteractions = () => {
handleNodeSelect(node.id)
}, [workflowStore, handleNodeSelect])

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

Expand All @@ -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(() => {
Expand Down Expand Up @@ -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])

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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')}
Expand Down

0 comments on commit 0a7ab9a

Please sign in to comment.