diff --git a/packages/react/src/store/index.ts b/packages/react/src/store/index.ts index d70c9c45..13f2bcf6 100644 --- a/packages/react/src/store/index.ts +++ b/packages/react/src/store/index.ts @@ -1,6 +1,5 @@ import { createWithEqualityFn } from 'zustand/traditional'; import { - clampPosition, getFitViewNodes, fitView as fitViewSystem, adoptUserNodes, diff --git a/packages/system/src/utils/store.ts b/packages/system/src/utils/store.ts index ebac335c..9417769d 100644 --- a/packages/system/src/utils/store.ts +++ b/packages/system/src/utils/store.ts @@ -41,12 +41,23 @@ const adoptUserNodesDefaultOptions = { checkEquality: true, }; +function mergeObjects>(base: T, incoming?: Partial): T { + const result = { ...base }; + for (const key in incoming) { + if (incoming[key] !== undefined) { + result[key] = incoming[key]; + } + } + + return result; +} + export function updateAbsolutePositions( nodeLookup: NodeLookup>, parentLookup: ParentLookup>, options?: UpdateNodesOptions ) { - const _options = { ...defaultOptions, ...options }; + const _options = mergeObjects(defaultOptions, options); for (const node of nodeLookup.values()) { if (!node.parentId) { continue; @@ -70,7 +81,7 @@ export function adoptUserNodes( parentLookup: ParentLookup>, options?: UpdateNodesOptions ) { - const _options = { ...adoptUserNodesDefaultOptions, ...options }; + const _options = mergeObjects(adoptUserNodesDefaultOptions, options); const tmpLookup = new Map(nodeLookup); nodeLookup.clear(); @@ -117,7 +128,7 @@ function updateChildPosition( parentLookup: ParentLookup>, options?: UpdateNodesOptions ) { - const _options = { ...defaultOptions, ...options }; + const _options = mergeObjects(defaultOptions, options); const parentId = node.parentId!; const parentNode = nodeLookup.get(parentId);