update absolute positions before initial fitView

This commit is contained in:
peterkogo
2024-09-19 11:40:19 +02:00
parent ce51e02acf
commit f1118df317
2 changed files with 12 additions and 5 deletions
+5 -1
View File
@@ -19,7 +19,8 @@ import {
type UpdateConnection, type UpdateConnection,
type ConnectionState, type ConnectionState,
type NodeOrigin, type NodeOrigin,
getFitViewNodes getFitViewNodes,
updateAbsolutePositions
} from '@xyflow/system'; } from '@xyflow/system';
import type { EdgeTypes, NodeTypes, Node, Edge, FitViewOptions } from '$lib/types'; import type { EdgeTypes, NodeTypes, Node, Edge, FitViewOptions } from '$lib/types';
@@ -96,6 +97,7 @@ export function createStore({
function updateNodeInternals(updates: Map<string, InternalNodeUpdate>) { function updateNodeInternals(updates: Map<string, InternalNodeUpdate>) {
const nodeLookup = get(store.nodeLookup); const nodeLookup = get(store.nodeLookup);
const parentLookup = get(store.parentLookup);
const { changes, updatedInternals } = updateNodeInternalsSystem( const { changes, updatedInternals } = updateNodeInternalsSystem(
updates, updates,
nodeLookup, nodeLookup,
@@ -108,6 +110,8 @@ export function createStore({
return; return;
} }
updateAbsolutePositions(nodeLookup, parentLookup, { nodeOrigin, nodeExtent });
if (!get(store.fitViewOnInitDone) && get(store.fitViewOnInit)) { if (!get(store.fitViewOnInitDone) && get(store.fitViewOnInit)) {
const fitViewOptions = get(store.fitViewOptions); const fitViewOptions = get(store.fitViewOptions);
const fitViewOnInitDone = fitViewSync({ const fitViewOnInitDone = fitViewSync({
+7 -4
View File
@@ -61,11 +61,14 @@ export function updateAbsolutePositions<NodeType extends NodeBase>(
) { ) {
const _options = mergeObjects(defaultOptions, options); const _options = mergeObjects(defaultOptions, options);
for (const node of nodeLookup.values()) { for (const node of nodeLookup.values()) {
if (!node.parentId) { if (node.parentId) {
continue; updateChildNode(node, nodeLookup, parentLookup, _options);
} else {
const positionWithOrigin = getNodePositionWithOrigin(node, _options.nodeOrigin);
const extent = isCoordinateExtent(node.extent) ? node.extent : _options.nodeExtent;
const clampedPosition = clampPosition(positionWithOrigin, extent, getNodeDimensions(node));
node.internals.positionAbsolute = clampedPosition;
} }
updateChildNode(node, nodeLookup, parentLookup, _options);
} }
} }