|
@@ -488,12 +488,22 @@ export const useNodesInteractions = () => {
|
|
|
_connectedNodeIsSelected: true,
|
|
|
},
|
|
|
}
|
|
|
+ const nodesConnectedSourceOrTargetHandleIdsMap = getNodesConnectedSourceOrTargetHandleIdsMap(
|
|
|
+ [
|
|
|
+ { type: 'add', edge: newEdge },
|
|
|
+ ],
|
|
|
+ nodes,
|
|
|
+ )
|
|
|
const newNodes = produce(nodes, (draft: Node[]) => {
|
|
|
draft.forEach((node) => {
|
|
|
node.data.selected = false
|
|
|
|
|
|
- if (node.id === prevNode.id)
|
|
|
- node.data._connectedSourceHandleIds?.push(prevNodeSourceHandle!)
|
|
|
+ if (nodesConnectedSourceOrTargetHandleIdsMap[node.id]) {
|
|
|
+ node.data = {
|
|
|
+ ...node.data,
|
|
|
+ ...nodesConnectedSourceOrTargetHandleIdsMap[node.id],
|
|
|
+ }
|
|
|
+ }
|
|
|
})
|
|
|
draft.push(newNode)
|
|
|
})
|
|
@@ -512,26 +522,42 @@ export const useNodesInteractions = () => {
|
|
|
if (!prevNodeId && nextNodeId) {
|
|
|
const nextNodeIndex = nodes.findIndex(node => node.id === nextNodeId)
|
|
|
const nextNode = nodes[nextNodeIndex]!
|
|
|
- newNode.data._connectedSourceHandleIds = [sourceHandle]
|
|
|
+ if ((nodeType !== BlockEnum.IfElse) && (nodeType !== BlockEnum.QuestionClassifier))
|
|
|
+ newNode.data._connectedSourceHandleIds = [sourceHandle]
|
|
|
newNode.data._connectedTargetHandleIds = []
|
|
|
newNode.position = {
|
|
|
x: nextNode.position.x,
|
|
|
y: nextNode.position.y,
|
|
|
}
|
|
|
|
|
|
- const newEdge = {
|
|
|
- id: `${newNode.id}-${nextNodeId}`,
|
|
|
- type: 'custom',
|
|
|
- source: newNode.id,
|
|
|
- sourceHandle,
|
|
|
- target: nextNodeId,
|
|
|
- targetHandle: nextNodeTargetHandle,
|
|
|
- data: {
|
|
|
- sourceType: newNode.data.type,
|
|
|
- targetType: nextNode.data.type,
|
|
|
- _connectedNodeIsSelected: true,
|
|
|
- },
|
|
|
+ let newEdge
|
|
|
+
|
|
|
+ if ((nodeType !== BlockEnum.IfElse) && (nodeType !== BlockEnum.QuestionClassifier)) {
|
|
|
+ newEdge = {
|
|
|
+ id: `${newNode.id}-${nextNodeId}`,
|
|
|
+ type: 'custom',
|
|
|
+ source: newNode.id,
|
|
|
+ sourceHandle,
|
|
|
+ target: nextNodeId,
|
|
|
+ targetHandle: nextNodeTargetHandle,
|
|
|
+ data: {
|
|
|
+ sourceType: newNode.data.type,
|
|
|
+ targetType: nextNode.data.type,
|
|
|
+ _connectedNodeIsSelected: true,
|
|
|
+ },
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ let nodesConnectedSourceOrTargetHandleIdsMap: Record<string, any>
|
|
|
+ if (newEdge) {
|
|
|
+ nodesConnectedSourceOrTargetHandleIdsMap = getNodesConnectedSourceOrTargetHandleIdsMap(
|
|
|
+ [
|
|
|
+ { type: 'add', edge: newEdge },
|
|
|
+ ],
|
|
|
+ nodes,
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
const afterNodesInSameBranch = getAfterNodesInSameBranch(nextNodeId!)
|
|
|
const afterNodesInSameBranchIds = afterNodesInSameBranch.map(node => node.id)
|
|
|
const newNodes = produce(nodes, (draft) => {
|
|
@@ -541,22 +567,28 @@ export const useNodesInteractions = () => {
|
|
|
if (afterNodesInSameBranchIds.includes(node.id))
|
|
|
node.position.x += NODE_WIDTH_X_OFFSET
|
|
|
|
|
|
- if (node.id === nextNodeId)
|
|
|
- node.data._connectedTargetHandleIds?.push(nextNodeTargetHandle!)
|
|
|
+ if (nodesConnectedSourceOrTargetHandleIdsMap?.[node.id]) {
|
|
|
+ node.data = {
|
|
|
+ ...node.data,
|
|
|
+ ...nodesConnectedSourceOrTargetHandleIdsMap[node.id],
|
|
|
+ }
|
|
|
+ }
|
|
|
})
|
|
|
draft.push(newNode)
|
|
|
})
|
|
|
setNodes(newNodes)
|
|
|
- const newEdges = produce(edges, (draft) => {
|
|
|
- draft.forEach((item) => {
|
|
|
- item.data = {
|
|
|
- ...item.data,
|
|
|
- _connectedNodeIsSelected: false,
|
|
|
- }
|
|
|
+ if (newEdge) {
|
|
|
+ const newEdges = produce(edges, (draft) => {
|
|
|
+ draft.forEach((item) => {
|
|
|
+ item.data = {
|
|
|
+ ...item.data,
|
|
|
+ _connectedNodeIsSelected: false,
|
|
|
+ }
|
|
|
+ })
|
|
|
+ draft.push(newEdge)
|
|
|
})
|
|
|
- draft.push(newEdge)
|
|
|
- })
|
|
|
- setEdges(newEdges)
|
|
|
+ setEdges(newEdges)
|
|
|
+ }
|
|
|
}
|
|
|
if (prevNodeId && nextNodeId) {
|
|
|
const prevNode = nodes.find(node => node.id === prevNodeId)!
|
|
@@ -771,14 +803,14 @@ export const useNodesInteractions = () => {
|
|
|
} = store.getState()
|
|
|
|
|
|
const nodes = getNodes()
|
|
|
- const bundledNodes = nodes.filter(node => node.data._isBundled && node.data.type !== BlockEnum.Start && node.data.type !== BlockEnum.End)
|
|
|
+ const bundledNodes = nodes.filter(node => node.data._isBundled && node.data.type !== BlockEnum.Start)
|
|
|
|
|
|
if (bundledNodes.length) {
|
|
|
setClipboardElements(bundledNodes)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- const selectedNode = nodes.find(node => node.data.selected && node.data.type !== BlockEnum.Start && node.data.type !== BlockEnum.End)
|
|
|
+ const selectedNode = nodes.find(node => node.data.selected && node.data.type !== BlockEnum.Start)
|
|
|
|
|
|
if (selectedNode)
|
|
|
setClipboardElements([selectedNode])
|
|
@@ -850,7 +882,7 @@ export const useNodesInteractions = () => {
|
|
|
} = store.getState()
|
|
|
const nodes = getNodes()
|
|
|
|
|
|
- const selectedNode = nodes.find(node => node.data.selected && node.data.type !== BlockEnum.Start && node.data.type !== BlockEnum.End)
|
|
|
+ const selectedNode = nodes.find(node => node.data.selected && node.data.type !== BlockEnum.Start)
|
|
|
|
|
|
if (selectedNode) {
|
|
|
const nodeType = selectedNode.data.type
|