refactor(resizer): only call resize end if resize happened #5508

This commit is contained in:
moklick
2025-09-15 11:37:35 +02:00
parent 88cf482893
commit 86e18498e2
2 changed files with 19 additions and 0 deletions
@@ -125,6 +125,8 @@ export function XYResizer({ domNode, nodeId, getStoreItems, onChange, onEnd }: X
let parentNode: InternalNodeBase | undefined = undefined; // Needed to fix expandParent let parentNode: InternalNodeBase | undefined = undefined; // Needed to fix expandParent
let parentExtent: CoordinateExtent | undefined = undefined; let parentExtent: CoordinateExtent | undefined = undefined;
let childExtent: 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<HTMLDivElement, unknown>() const dragHandler = drag<HTMLDivElement, unknown>()
.on('start', (event: ResizeDragEvent) => { .on('start', (event: ResizeDragEvent) => {
@@ -300,13 +302,20 @@ export function XYResizer({ domNode, nodeId, getStoreItems, onChange, onEnd }: X
if (callResize === false) { if (callResize === false) {
return; return;
} }
resizeDetected = true;
onResize?.(event, nextValues); onResize?.(event, nextValues);
onChange(change, childChanges); onChange(change, childChanges);
}) })
.on('end', (event: ResizeDragEvent) => { .on('end', (event: ResizeDragEvent) => {
if (!resizeDetected) {
return;
}
onResizeEnd?.(event, { ...prevValues }); onResizeEnd?.(event, { ...prevValues });
onEnd?.({ ...prevValues }); onEnd?.({ ...prevValues });
resizeDetected = false;
}); });
selection.call(dragHandler); selection.call(dragHandler);
} }
+10
View File
@@ -1,5 +1,9 @@
import type { D3DragEvent, SubjectPosition } from 'd3-drag'; import type { D3DragEvent, SubjectPosition } from 'd3-drag';
/**
* @public
* @inline
*/
export type ResizeParams = { export type ResizeParams = {
x: number; x: number;
y: number; y: number;
@@ -47,6 +51,12 @@ export const XY_RESIZER_LINE_POSITIONS: ControlLinePosition[] = ['top', 'right',
type OnResizeHandler<Params = ResizeParams, Result = void> = (event: ResizeDragEvent, params: Params) => Result; type OnResizeHandler<Params = ResizeParams, Result = void> = (event: ResizeDragEvent, params: Params) => Result;
export type ResizeDragEvent = D3DragEvent<HTMLDivElement, null, SubjectPosition>; export type ResizeDragEvent = D3DragEvent<HTMLDivElement, null, SubjectPosition>;
/**
* Callback to determine if node should resize
*
* @inline
* @public
*/
export type ShouldResize = OnResizeHandler<ResizeParamsWithDirection, boolean>; export type ShouldResize = OnResizeHandler<ResizeParamsWithDirection, boolean>;
export type OnResizeStart = OnResizeHandler; export type OnResizeStart = OnResizeHandler;
export type OnResize = OnResizeHandler<ResizeParamsWithDirection>; export type OnResize = OnResizeHandler<ResizeParamsWithDirection>;