refactor(system): mutate internal node instead of creating a new one

This commit is contained in:
moklick
2024-05-08 22:20:13 +02:00
parent adff7ef9dd
commit ccadb043c3
+15 -22
View File
@@ -254,13 +254,10 @@ export function updateNodeInternals<NodeType extends InternalNodeBase>(
const node = nodeLookup.get(update.id); const node = nodeLookup.get(update.id);
if (node?.hidden) { if (node?.hidden) {
nodeLookup.set(node.id, { node.internals = {
...node, ...node.internals,
internals: { handleBounds: undefined,
...node.internals, };
handleBounds: undefined,
},
});
updatedInternals = true; updatedInternals = true;
} else if (node) { } else if (node) {
const dimensions = getDimensions(update.nodeElement); const dimensions = getDimensions(update.nodeElement);
@@ -272,33 +269,29 @@ export function updateNodeInternals<NodeType extends InternalNodeBase>(
); );
if (doUpdate) { if (doUpdate) {
const newNode = { node.measured = dimensions;
...node, node.internals = {
measured: dimensions, ...node.internals,
internals: { handleBounds: {
...node.internals, source: getHandleBounds('.source', update.nodeElement, zoom, node.origin || nodeOrigin),
handleBounds: { target: getHandleBounds('.target', update.nodeElement, zoom, node.origin || nodeOrigin),
source: getHandleBounds('.source', update.nodeElement, zoom, node.origin || nodeOrigin),
target: getHandleBounds('.target', update.nodeElement, zoom, node.origin || nodeOrigin),
},
}, },
}; };
nodeLookup.set(node.id, newNode);
updatedInternals = true; updatedInternals = true;
if (dimensionChanged) { if (dimensionChanged) {
changes.push({ changes.push({
id: newNode.id, id: node.id,
type: 'dimensions', type: 'dimensions',
dimensions, dimensions,
}); });
if (newNode.expandParent && newNode.parentId) { if (node.expandParent && node.parentId) {
parentExpandChildren.push({ parentExpandChildren.push({
id: newNode.id, id: node.id,
parentId: newNode.parentId, parentId: node.parentId,
rect: nodeToRect(newNode, newNode.origin || nodeOrigin), rect: nodeToRect(node, nodeOrigin),
}); });
} }
} }