feat(node-resizer): add onBeforeResize handler

This commit is contained in:
moklick
2023-01-12 14:34:39 +01:00
parent 893ee87838
commit 4d7a5e785c
8 changed files with 61 additions and 7 deletions
@@ -15,6 +15,7 @@ export default function NodeResizer({
minWidth = 10,
minHeight = 10,
onResizeStart,
onBeforeResize,
onResize,
onResizeEnd,
}: NodeResizerProps) {
@@ -36,6 +37,7 @@ export default function NodeResizer({
minWidth={minWidth}
minHeight={minHeight}
onResizeStart={onResizeStart}
onBeforeResize={onBeforeResize}
onResize={onResize}
onResizeEnd={onResizeEnd}
/>
@@ -51,6 +53,7 @@ export default function NodeResizer({
minWidth={minWidth}
minHeight={minHeight}
onResizeStart={onResizeStart}
onBeforeResize={onBeforeResize}
onResize={onResize}
onResizeEnd={onResizeEnd}
/>
@@ -32,6 +32,7 @@ function ResizeControl({
minWidth = 10,
minHeight = 10,
onResizeStart,
onBeforeResize,
onResize,
onResizeEnd,
}: ResizeControlProps) {
@@ -98,6 +99,7 @@ function ResizeControl({
const height = Math.max(startHeight + (invertY ? -distY : distY), minHeight);
const isWidthChange = width !== prevWidth;
const isHeightChange = height !== prevHeight;
const onBeforeResizeResult = onBeforeResize?.(event, { ...prevValues.current });
if (invertX || invertY) {
const x = invertX ? startNodeX - (width - startWidth) : startNodeX;
@@ -139,6 +141,9 @@ function ResizeControl({
prevValues.current.width = width;
prevValues.current.height = height;
}
if (onBeforeResizeResult === false) {
return;
}
onResize?.(event, { ...prevValues.current });
triggerNodeChanges(changes);
+2 -1
View File
@@ -19,6 +19,7 @@ export type NodeResizerProps = {
minWidth?: number;
minHeight?: number;
onResizeStart?: (event: ResizeDragEvent, params: ResizeEventParams) => void;
onBeforeResize?: (event: ResizeDragEvent, params: ResizeEventParams) => unknown;
onResize?: (event: ResizeDragEvent, params: ResizeEventParams) => void;
onResizeEnd?: (event: ResizeDragEvent, params: ResizeEventParams) => void;
};
@@ -34,7 +35,7 @@ export enum ResizeControlVariant {
export type ResizeControlProps = Pick<
NodeResizerProps,
'nodeId' | 'color' | 'minWidth' | 'minHeight' | 'onResizeStart' | 'onResize' | 'onResizeEnd'
'nodeId' | 'color' | 'minWidth' | 'minHeight' | 'onResizeStart' | 'onBeforeResize' | 'onResize' | 'onResizeEnd'
> & {
position?: ControlPosition;
variant?: ResizeControlVariant;