diff --git a/packages/react/src/store/initialState.ts b/packages/react/src/store/initialState.ts index ad4b34ca..379a70e3 100644 --- a/packages/react/src/store/initialState.ts +++ b/packages/react/src/store/initialState.ts @@ -25,7 +25,10 @@ const getInitialState = ({ } = {}): ReactFlowStore => { const nodeLookup = new Map(); const connectionLookup = updateConnectionLookup(new Map(), edges); - const nextNodes = adoptUserProvidedNodes(nodes, nodeLookup, { nodeOrigin: [0, 0], elevateNodesOnSelect: false }); + const nextNodes = adoptUserProvidedNodes(nodes, nodeLookup, { + nodeOrigin: [0, 0], + elevateNodesOnSelect: false, + }); let transform: Transform = [0, 0, 1]; diff --git a/packages/svelte/src/lib/store/utils.ts b/packages/svelte/src/lib/store/utils.ts index 4c1b2d12..f8c1aef0 100644 --- a/packages/svelte/src/lib/store/utils.ts +++ b/packages/svelte/src/lib/store/utils.ts @@ -11,8 +11,6 @@ import { updateConnectionLookup, type Viewport, type PanZoomInstance, - type Viewport, - type PanZoomInstance, type ConnectionLookup } from '@xyflow/system'; diff --git a/packages/system/src/types/nodes.ts b/packages/system/src/types/nodes.ts index 33884bf7..3839880c 100644 --- a/packages/system/src/types/nodes.ts +++ b/packages/system/src/types/nodes.ts @@ -43,7 +43,7 @@ export type NodeBase /** Holds a reference to the original node object provided by the user * (which may lack some fields, like `computed` or `[internalSymbol]`. Used * as an optimization to avoid certain operations. */ - userProvidedNode: WeakRef; + userProvidedNode: NodeBase; }; }; diff --git a/packages/system/src/utils/store.ts b/packages/system/src/utils/store.ts index 7edebec2..96950710 100644 --- a/packages/system/src/utils/store.ts +++ b/packages/system/src/utils/store.ts @@ -80,7 +80,10 @@ export function adoptUserProvidedNodes( const nextNodes = nodes.map((n) => { const currentStoreNode = tmpLookup.get(n.id); - if (n === currentStoreNode?.[internalsSymbol]?.userProvidedNode.deref()) return currentStoreNode; + if (n === currentStoreNode?.[internalsSymbol]?.userProvidedNode) { + nodeLookup.set(n.id, currentStoreNode); + return currentStoreNode; + } const node: NodeType = { ...options.defaults, @@ -103,7 +106,7 @@ export function adoptUserProvidedNodes( value: { handleBounds: currInternals?.handleBounds, z, - userProvidedNode: new WeakRef(n), + userProvidedNode: n, }, }); @@ -144,14 +147,14 @@ function calculateXYZPosition( ); } -export function updateNodeDimensions( +export function updateNodeDimensions( updates: Map, - nodes: NodeBase[], - nodeLookup: Map, + nodes: NodeType[], + nodeLookup: Map, domNode: HTMLElement | null, nodeOrigin?: NodeOrigin, onUpdate?: (id: string, dimensions: Dimensions) => void -): NodeBase[] | null { +): NodeType[] | null { const viewportNode = domNode?.querySelector('.xyflow__viewport'); if (!viewportNode) {