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
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 21 additions and 11 deletions

View File

@ -1027,7 +1027,7 @@ export const useNodesInteractions = () => {
handleNodeSelect(node.id) handleNodeSelect(node.id)
}, [workflowStore, handleNodeSelect]) }, [workflowStore, handleNodeSelect])
const handleNodesCopy = useCallback(() => { const handleNodesCopy = useCallback((nodeId?: string) => {
if (getNodesReadOnly()) if (getNodesReadOnly())
return return
@ -1038,17 +1038,27 @@ export const useNodesInteractions = () => {
} = store.getState() } = store.getState()
const nodes = getNodes() const nodes = getNodes()
const bundledNodes = nodes.filter(node => node.data._isBundled && node.data.type !== BlockEnum.Start && !node.data.isInIteration)
if (bundledNodes.length) { if (nodeId) {
setClipboardElements(bundledNodes) // If nodeId is provided, copy that specific node
return 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) const selectedNode = nodes.find(node => node.data.selected && node.data.type !== BlockEnum.Start)
setClipboardElements([selectedNode])
if (selectedNode)
setClipboardElements([selectedNode])
}
}, [getNodesReadOnly, store, workflowStore]) }, [getNodesReadOnly, store, workflowStore])
const handleNodesPaste = useCallback(() => { const handleNodesPaste = useCallback(() => {
@ -1128,11 +1138,11 @@ export const useNodesInteractions = () => {
} }
}, [getNodesReadOnly, workflowStore, store, reactflow, saveStateToHistory, handleSyncWorkflowDraft, handleNodeIterationChildrenCopy]) }, [getNodesReadOnly, workflowStore, store, reactflow, saveStateToHistory, handleSyncWorkflowDraft, handleNodeIterationChildrenCopy])
const handleNodesDuplicate = useCallback(() => { const handleNodesDuplicate = useCallback((nodeId?: string) => {
if (getNodesReadOnly()) if (getNodesReadOnly())
return return
handleNodesCopy() handleNodesCopy(nodeId)
handleNodesPaste() handleNodesPaste()
}, [getNodesReadOnly, handleNodesCopy, handleNodesPaste]) }, [getNodesReadOnly, handleNodesCopy, handleNodesPaste])

View File

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