fix: workflow add next node from knowledge retrieval node (#4467)

This commit is contained in:
zxhlyh
2024-05-17 11:42:03 +08:00
committed by GitHub
parent 0ac5d621b6
commit de3a7603ac
3 changed files with 81 additions and 11 deletions

View File

@@ -466,8 +466,7 @@ export const useNodesInteractions = () => {
const prevNode = nodes[prevNodeIndex]
const outgoers = getOutgoers(prevNode, nodes, edges).sort((a, b) => a.position.y - b.position.y)
const lastOutgoer = outgoers[outgoers.length - 1]
if (prevNode.data.type === BlockEnum.KnowledgeRetrieval)
targetHandle = prevNodeId
newNode.data._connectedTargetHandleIds = [targetHandle]
newNode.data._connectedSourceHandleIds = []
newNode.position = {
@@ -593,8 +592,7 @@ export const useNodesInteractions = () => {
if (prevNodeId && nextNodeId) {
const prevNode = nodes.find(node => node.id === prevNodeId)!
const nextNode = nodes.find(node => node.id === nextNodeId)!
if (prevNode.data.type === BlockEnum.KnowledgeRetrieval)
targetHandle = prevNodeId
newNode.data._connectedTargetHandleIds = [targetHandle]
newNode.data._connectedSourceHandleIds = [sourceHandle]
newNode.position = {
@@ -925,10 +923,6 @@ export const useNodesInteractions = () => {
edges,
} = store.getState()
const edgeSelected = edges.some(edge => edge.selected)
if (edgeSelected)
return
const nodes = getNodes()
const bundledNodes = nodes.filter(node => node.data._isBundled && node.data.type !== BlockEnum.Start)
@@ -937,6 +931,10 @@ export const useNodesInteractions = () => {
return
}
const edgeSelected = edges.some(edge => edge.selected)
if (edgeSelected)
return
const selectedNode = nodes.find(node => node.data.selected && node.data.type !== BlockEnum.Start)
if (selectedNode)

View File

@@ -101,9 +101,40 @@ export const useSelectionInteractions = () => {
setNodes(newNodes)
}, [store, workflowStore])
const handleSelectionCancel = useCallback(() => {
const {
getNodes,
setNodes,
edges,
setEdges,
} = store.getState()
store.setState({
userSelectionRect: null,
userSelectionActive: true,
})
const nodes = getNodes()
const newNodes = produce(nodes, (draft) => {
draft.forEach((node) => {
if (node.data._isBundled)
node.data._isBundled = false
})
})
setNodes(newNodes)
const newEdges = produce(edges, (draft) => {
draft.forEach((edge) => {
if (edge.data._isBundled)
edge.data._isBundled = false
})
})
setEdges(newEdges)
}, [store])
return {
handleSelectionStart,
handleSelectionChange,
handleSelectionDrag,
handleSelectionCancel,
}
}