Merge pull request #5635 from tornado-softwares/main

Fix #5633
This commit is contained in:
Moritz Klack
2025-11-25 11:14:55 +01:00
committed by GitHub
4 changed files with 36 additions and 6 deletions
+7
View File
@@ -0,0 +1,7 @@
---
'@xyflow/react': patch
'@xyflow/svelte': patch
'@xyflow/system': patch
---
Update an ongoing connection when user moves node with keyboard.
+8 -1
View File
@@ -14,6 +14,8 @@ import {
NodeOrigin, NodeOrigin,
CoordinateExtent, CoordinateExtent,
fitViewport, fitViewport,
getHandlePosition,
Position,
} from '@xyflow/system'; } from '@xyflow/system';
import { applyEdgeChanges, applyNodeChanges, createSelectionChange, getSelectionChanges } from '../utils/changes'; import { applyEdgeChanges, applyNodeChanges, createSelectionChange, getSelectionChanges } from '../utils/changes';
@@ -176,7 +178,7 @@ const createStore = ({
updateNodePositions: (nodeDragItems, dragging = false) => { updateNodePositions: (nodeDragItems, dragging = false) => {
const parentExpandChildren: ParentExpandChild[] = []; const parentExpandChildren: ParentExpandChild[] = [];
const changes = []; const changes = [];
const { nodeLookup, triggerNodeChanges } = get(); const { nodeLookup, triggerNodeChanges, connection, updateConnection } = get();
for (const [id, dragItem] of nodeDragItems) { for (const [id, dragItem] of nodeDragItems) {
// we are using the nodelookup to be sure to use the current expandParent and parentId value // we are using the nodelookup to be sure to use the current expandParent and parentId value
@@ -195,6 +197,11 @@ const createStore = ({
dragging, 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) { if (expandParent && node.parentId) {
parentExpandChildren.push({ parentExpandChildren.push({
id, id,
+12 -1
View File
@@ -15,7 +15,9 @@ import {
updateAbsolutePositions, updateAbsolutePositions,
snapPosition, snapPosition,
calculateNodePosition, calculateNodePosition,
type SetCenterOptions type SetCenterOptions,
getHandlePosition,
Position
} 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';
@@ -51,6 +53,15 @@ export function createStore<NodeType extends Node = Node, EdgeType extends Edge
const updateNodePositions: UpdateNodePositions = (nodeDragItems, dragging = false) => { 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) {
const internalNode = store.nodeLookup.get(node.id);
if (internalNode) {
store.connection = {
...store.connection,
from: getHandlePosition(internalNode, store.connection.fromHandle, Position.Left, true)
};
}
}
const dragItem = nodeDragItems.get(node.id); const dragItem = nodeDragItems.get(node.id);
return dragItem ? { ...node, position: dragItem.position, dragging } : node; return dragItem ? { ...node, position: dragItem.position, dragging } : node;
}); });
+9 -4
View File
@@ -93,8 +93,8 @@ function onPointerDown(
position: fromHandleInternal.position, position: fromHandleInternal.position,
}; };
const fromNodeInternal = nodeLookup.get(nodeId)!; const fromInternalNode = nodeLookup.get(nodeId)!;
const from = getHandlePosition(fromNodeInternal, fromHandle, Position.Left, true); const from = getHandlePosition(fromInternalNode, fromHandle, Position.Left, true);
let previousConnection: ConnectionInProgress = { let previousConnection: ConnectionInProgress = {
inProgress: true, inProgress: true,
@@ -103,7 +103,7 @@ function onPointerDown(
from, from,
fromHandle, fromHandle,
fromPosition: fromHandle.position, fromPosition: fromHandle.position,
fromNode: fromNodeInternal, fromNode: fromInternalNode,
to: position, to: position,
toHandle: null, toHandle: null,
@@ -172,9 +172,14 @@ function onPointerDown(
connection = result.connection; connection = result.connection;
isValid = isConnectionValid(!!closestHandle, result.isValid); isValid = isConnectionValid(!!closestHandle, result.isValid);
const fromInternalNode = nodeLookup.get(nodeId);
const from = fromInternalNode
? getHandlePosition(fromInternalNode, fromHandle, Position.Left, true)
: previousConnection.from;
const newConnection: ConnectionInProgress = { const newConnection: ConnectionInProgress = {
// from stays the same
...previousConnection, ...previousConnection,
from,
isValid, isValid,
to: to:
result.toHandle && isValid result.toHandle && isValid