Dont call onNodesChange when there are no changes & call setNodes instead
This commit is contained in:
@@ -28,7 +28,7 @@ export function BatchProvider<NodeType extends Node = Node, EdgeType extends Edg
|
|||||||
const store = useStoreApi<NodeType, EdgeType>();
|
const store = useStoreApi<NodeType, EdgeType>();
|
||||||
|
|
||||||
const nodeQueueHandler = useCallback((queueItems: QueueItem<NodeType>[]) => {
|
const nodeQueueHandler = useCallback((queueItems: QueueItem<NodeType>[]) => {
|
||||||
const { nodes = [], setNodes, hasDefaultNodes, onNodesChange, nodeLookup } = store.getState();
|
const { nodes = [], setNodes, hasDefaultNodes, onNodesChange, nodeLookup, fitViewQueued } = store.getState();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is essentially an `Array.reduce` in imperative clothing. Processing
|
* This is essentially an `Array.reduce` in imperative clothing. Processing
|
||||||
@@ -43,12 +43,17 @@ export function BatchProvider<NodeType extends Node = Node, EdgeType extends Edg
|
|||||||
if (hasDefaultNodes) {
|
if (hasDefaultNodes) {
|
||||||
setNodes(next);
|
setNodes(next);
|
||||||
} else if (onNodesChange) {
|
} else if (onNodesChange) {
|
||||||
onNodesChange(
|
const changes = getElementsDiffChanges({
|
||||||
getElementsDiffChanges({
|
items: next,
|
||||||
items: next,
|
lookup: nodeLookup,
|
||||||
lookup: nodeLookup,
|
}) as NodeChange<NodeType>[];
|
||||||
}) as NodeChange<NodeType>[]
|
if (changes.length > 0) {
|
||||||
);
|
onNodesChange(changes);
|
||||||
|
} else if (fitViewQueued) {
|
||||||
|
// If there are no changes to the nodes, we still need to call setNodes
|
||||||
|
// to trigger a re-render and fitView.
|
||||||
|
setNodes(next);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}, []);
|
}, []);
|
||||||
const nodeQueue = useQueue<NodeType>(nodeQueueHandler);
|
const nodeQueue = useQueue<NodeType>(nodeQueueHandler);
|
||||||
|
|||||||
Reference in New Issue
Block a user