mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-12 19:39:02 +08:00
fix: incorrect duplication when no target node is selected (#7539)
This commit is contained in:
parent
9618f86980
commit
0a7ab9a47d
@ -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])
|
||||||
|
|
||||||
|
@ -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')}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user