From 86e18498e2b99d50e386f5b1785b733319730634 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 15 Sep 2025 11:37:35 +0200 Subject: [PATCH 1/4] refactor(resizer): only call resize end if resize happened #5508 --- packages/system/src/xyresizer/XYResizer.ts | 9 +++++++++ packages/system/src/xyresizer/types.ts | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/packages/system/src/xyresizer/XYResizer.ts b/packages/system/src/xyresizer/XYResizer.ts index e6aace30..326a7007 100644 --- a/packages/system/src/xyresizer/XYResizer.ts +++ b/packages/system/src/xyresizer/XYResizer.ts @@ -125,6 +125,8 @@ export function XYResizer({ domNode, nodeId, getStoreItems, onChange, onEnd }: X let parentNode: InternalNodeBase | undefined = undefined; // Needed to fix expandParent let parentExtent: CoordinateExtent | undefined = undefined; let childExtent: CoordinateExtent | undefined = undefined; + // we only want to trigger onResizeEnd if onResize was actually called + let resizeDetected = false; const dragHandler = drag() .on('start', (event: ResizeDragEvent) => { @@ -300,13 +302,20 @@ export function XYResizer({ domNode, nodeId, getStoreItems, onChange, onEnd }: X if (callResize === false) { return; } + resizeDetected = true; onResize?.(event, nextValues); onChange(change, childChanges); }) .on('end', (event: ResizeDragEvent) => { + if (!resizeDetected) { + return; + } + onResizeEnd?.(event, { ...prevValues }); onEnd?.({ ...prevValues }); + + resizeDetected = false; }); selection.call(dragHandler); } diff --git a/packages/system/src/xyresizer/types.ts b/packages/system/src/xyresizer/types.ts index 1d16eb3a..3dc0c45b 100644 --- a/packages/system/src/xyresizer/types.ts +++ b/packages/system/src/xyresizer/types.ts @@ -1,5 +1,9 @@ import type { D3DragEvent, SubjectPosition } from 'd3-drag'; +/** + * @public + * @inline + */ export type ResizeParams = { x: number; y: number; @@ -47,6 +51,12 @@ export const XY_RESIZER_LINE_POSITIONS: ControlLinePosition[] = ['top', 'right', type OnResizeHandler = (event: ResizeDragEvent, params: Params) => Result; export type ResizeDragEvent = D3DragEvent; +/** + * Callback to determine if node should resize + * + * @inline + * @public + */ export type ShouldResize = OnResizeHandler; export type OnResizeStart = OnResizeHandler; export type OnResize = OnResizeHandler; From b6ae4cc11f1456f843ace7e7f3de41c9196179e0 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 15 Sep 2025 11:38:24 +0200 Subject: [PATCH 2/4] chore(changeset): add --- .changeset/heavy-days-admire.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/heavy-days-admire.md diff --git a/.changeset/heavy-days-admire.md b/.changeset/heavy-days-admire.md new file mode 100644 index 00000000..d87eea13 --- /dev/null +++ b/.changeset/heavy-days-admire.md @@ -0,0 +1,5 @@ +--- +'@xyflow/system': patch +--- + +Only call resize end if node was resized From 3cbe4377669ec3c4cc821e367c08da866850a64a Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 15 Sep 2025 11:43:50 +0200 Subject: [PATCH 3/4] chore(resizer-types): inline --- packages/system/src/xyresizer/types.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/system/src/xyresizer/types.ts b/packages/system/src/xyresizer/types.ts index 3dc0c45b..92bde6fd 100644 --- a/packages/system/src/xyresizer/types.ts +++ b/packages/system/src/xyresizer/types.ts @@ -19,6 +19,7 @@ export type ResizeParamsWithDirection = ResizeParams & { * Used to determine the control line position of the NodeResizer * * @public + * @inline */ export type ControlLinePosition = 'top' | 'bottom' | 'left' | 'right'; @@ -26,6 +27,7 @@ export type ControlLinePosition = 'top' | 'bottom' | 'left' | 'right'; * Used to determine the control position of the NodeResizer * * @public + * @inline */ export type ControlPosition = ControlLinePosition | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'; @@ -42,6 +44,7 @@ export enum ResizeControlVariant { /** * The direction the user can resize the node. * @public + * @inline */ export type ResizeControlDirection = 'horizontal' | 'vertical'; From 8e5654c5471ac71bfda369d669aa5190a51f2053 Mon Sep 17 00:00:00 2001 From: peterkogo Date: Mon, 15 Sep 2025 16:57:52 +0200 Subject: [PATCH 4/4] fix changeset --- .changeset/heavy-days-admire.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.changeset/heavy-days-admire.md b/.changeset/heavy-days-admire.md index d87eea13..2673b2bc 100644 --- a/.changeset/heavy-days-admire.md +++ b/.changeset/heavy-days-admire.md @@ -1,5 +1,7 @@ --- '@xyflow/system': patch +'@xyflow/svelte': patch +'@xyflow/react': patch --- -Only call resize end if node was resized +Prevent calling onResizeEnd if node was not resized