This commit is contained in:
Tornado Softwares
2025-11-18 16:24:11 +01:00
parent d33360b5c7
commit 99453f0993
3 changed files with 27 additions and 8 deletions

View File

@@ -14,6 +14,8 @@ import {
NodeOrigin,
CoordinateExtent,
fitViewport,
getHandlePosition,
Position,
} from '@xyflow/system';
import { applyEdgeChanges, applyNodeChanges, createSelectionChange, getSelectionChanges } from '../utils/changes';
@@ -176,7 +178,7 @@ const createStore = ({
updateNodePositions: (nodeDragItems, dragging = false) => {
const parentExpandChildren: ParentExpandChild[] = [];
const changes = [];
const { nodeLookup, triggerNodeChanges } = get();
const { nodeLookup, triggerNodeChanges, connection, updateConnection } = get();
for (const [id, dragItem] of nodeDragItems) {
// we are using the nodelookup to be sure to use the current expandParent and parentId value
@@ -188,13 +190,18 @@ const createStore = ({
type: 'position',
position: expandParent
? {
x: Math.max(0, dragItem.position.x),
y: Math.max(0, dragItem.position.y),
}
x: Math.max(0, dragItem.position.x),
y: Math.max(0, dragItem.position.y),
}
: dragItem.position,
dragging,
};
if (node && connection.inProgress && connection.fromNode.id == node.id) {
const updatedFrom = getHandlePosition(node, connection.fromHandle, Position.Left, true);
updateConnection({...connection,from: updatedFrom})
}
if (expandParent && node.parentId) {
parentExpandChildren.push({
id,

View File

@@ -15,7 +15,9 @@ import {
updateAbsolutePositions,
snapPosition,
calculateNodePosition,
type SetCenterOptions
type SetCenterOptions,
getHandlePosition,
Position
} from '@xyflow/system';
import type { EdgeTypes, NodeTypes, Node, Edge, FitViewOptions } from '$lib/types';
@@ -50,7 +52,14 @@ export function createStore<NodeType extends Node = Node, EdgeType extends Edge
}
const updateNodePositions: UpdateNodePositions = (nodeDragItems, dragging = false) => {
store.nodes = store.nodes.map((node) => {
store.nodes = store.nodes.map((node) => {
if (store.connection.inProgress && store.connection.fromNode.id === node.id) {
store.connection = {
...store.connection,
from: getHandlePosition(store.nodeLookup.get(node.id), store.connection.fromHandle, Position.Left, true)
};
}
const dragItem = nodeDragItems.get(node.id);
return dragItem ? { ...node, position: dragItem.position, dragging } : node;
});

View File

@@ -171,10 +171,13 @@ function onPointerDown(
resultHandleDomNode = result.handleDomNode;
connection = result.connection;
isValid = isConnectionValid(!!closestHandle, result.isValid);
const fromNodeInternal = nodeLookup.get(nodeId)!;
const from = getHandlePosition(fromNodeInternal, fromHandle, Position.Left, true);
const newConnection: ConnectionInProgress = {
// from stays the same
const newConnection: ConnectionInProgress = {
...previousConnection,
from,
isValid,
to:
result.toHandle && isValid