fix(react): use internal nodes for deselecting node #4716
This commit is contained in:
@@ -20,7 +20,6 @@ import {
|
|||||||
import { applyEdgeChanges, applyNodeChanges, createSelectionChange, getSelectionChanges } from '../utils/changes';
|
import { applyEdgeChanges, applyNodeChanges, createSelectionChange, getSelectionChanges } from '../utils/changes';
|
||||||
import getInitialState from './initialState';
|
import getInitialState from './initialState';
|
||||||
import type { ReactFlowState, Node, Edge, UnselectNodesAndEdgesParams, FitViewOptions } from '../types';
|
import type { ReactFlowState, Node, Edge, UnselectNodesAndEdgesParams, FitViewOptions } from '../types';
|
||||||
|
|
||||||
const createStore = ({
|
const createStore = ({
|
||||||
nodes,
|
nodes,
|
||||||
edges,
|
edges,
|
||||||
@@ -238,12 +237,17 @@ const createStore = ({
|
|||||||
triggerNodeChanges(getSelectionChanges(nodeLookup, new Set(), true));
|
triggerNodeChanges(getSelectionChanges(nodeLookup, new Set(), true));
|
||||||
},
|
},
|
||||||
unselectNodesAndEdges: ({ nodes, edges }: UnselectNodesAndEdgesParams = {}) => {
|
unselectNodesAndEdges: ({ nodes, edges }: UnselectNodesAndEdgesParams = {}) => {
|
||||||
const { edges: storeEdges, nodes: storeNodes, triggerNodeChanges, triggerEdgeChanges } = get();
|
const { edges: storeEdges, nodes: storeNodes, nodeLookup, triggerNodeChanges, triggerEdgeChanges } = get();
|
||||||
const nodesToUnselect = nodes ? nodes : storeNodes;
|
const nodesToUnselect = nodes ? nodes : storeNodes;
|
||||||
const edgesToUnselect = edges ? edges : storeEdges;
|
const edgesToUnselect = edges ? edges : storeEdges;
|
||||||
|
|
||||||
const nodeChanges = nodesToUnselect.map((n) => {
|
const nodeChanges = nodesToUnselect.map((n) => {
|
||||||
n.selected = false;
|
const internalNode = nodeLookup.get(n.id);
|
||||||
|
if (internalNode) {
|
||||||
|
// we need to unselect the internal node that was selected previously before we
|
||||||
|
// send the change to the user to prevent it to be selected while dragging the new node
|
||||||
|
internalNode.selected = false;
|
||||||
|
}
|
||||||
|
|
||||||
return createSelectionChange(n.id, false);
|
return createSelectionChange(n.id, false);
|
||||||
});
|
});
|
||||||
const edgeChanges = edgesToUnselect.map((edge) => createSelectionChange(edge.id, false));
|
const edgeChanges = edgesToUnselect.map((edge) => createSelectionChange(edge.id, false));
|
||||||
|
|||||||
Reference in New Issue
Block a user