feat(resizer): add resize event handlers

This commit is contained in:
moklick
2022-12-07 16:30:01 +01:00
parent 5e916ba2db
commit 4c2acf5aa1
4 changed files with 53 additions and 9 deletions
@@ -14,6 +14,9 @@ export default function NodeResizer({
color,
minWidth = 10,
minHeight = 10,
onResizeStart,
onResize,
onResizeEnd,
}: NodeResizerProps) {
if (!isVisible) {
return null;
@@ -32,6 +35,9 @@ export default function NodeResizer({
color={color}
minWidth={minWidth}
minHeight={minHeight}
onResizeStart={onResizeStart}
onResize={onResize}
onResizeEnd={onResizeEnd}
/>
))}
{handleControls.map((c) => (
@@ -44,6 +50,9 @@ export default function NodeResizer({
color={color}
minWidth={minWidth}
minHeight={minHeight}
onResizeStart={onResizeStart}
onResize={onResize}
onResizeEnd={onResizeEnd}
/>
))}
</>
+9 -2
View File
@@ -31,6 +31,9 @@ function ResizeControl({
color,
minWidth = 10,
minHeight = 10,
onResizeStart,
onResize,
onResizeEnd,
}: ResizeControlProps) {
const contextNodeId = useNodeId();
const id = typeof nodeId === 'string' ? nodeId : contextNodeId;
@@ -65,6 +68,8 @@ function ResizeControl({
pointerX: xSnapped,
pointerY: ySnapped,
};
onResizeStart?.(event, { ...prevValues.current });
})
.on('drag', (event: ResizeDragEvent) => {
const { nodeInternals, triggerNodeChanges } = store.getState();
@@ -135,16 +140,18 @@ function ResizeControl({
prevValues.current.height = height;
}
onResize?.(event, { ...prevValues.current });
triggerNodeChanges(changes);
}
})
.on('end', () => {
.on('end', (event: ResizeDragEvent) => {
const dimensionChange: NodeDimensionChange = {
id: id,
type: 'dimensions',
resizing: true,
resizing: false,
};
onResizeEnd?.(event, { ...prevValues.current });
store.getState().triggerNodeChanges([dimensionChange]);
});
+14 -5
View File
@@ -1,6 +1,13 @@
import type { CSSProperties, ReactNode } from 'react';
import type { D3DragEvent, SubjectPosition } from 'd3-drag';
export type ResizeEventParams = {
x: number;
y: number;
width: number;
height: number;
};
export type NodeResizerProps = {
nodeId?: string;
color?: string;
@@ -11,6 +18,9 @@ export type NodeResizerProps = {
isVisible?: boolean;
minWidth?: number;
minHeight?: number;
onResizeStart?: (event: ResizeDragEvent, params: ResizeEventParams) => void;
onResize?: (event: ResizeDragEvent, params: ResizeEventParams) => void;
onResizeEnd?: (event: ResizeDragEvent, params: ResizeEventParams) => void;
};
export type ControlLinePosition = 'top' | 'bottom' | 'left' | 'right';
@@ -22,16 +32,15 @@ export enum ResizeControlVariant {
Handle = 'handle',
}
export type ResizeControlProps = {
nodeId?: string;
export type ResizeControlProps = Pick<
NodeResizerProps,
'nodeId' | 'color' | 'minWidth' | 'minHeight' | 'onResizeStart' | 'onResize' | 'onResizeEnd'
> & {
position?: ControlPosition;
variant?: ResizeControlVariant;
color?: string;
className?: string;
style?: CSSProperties;
children?: ReactNode;
minWidth?: number;
minHeight?: number;
};
export type ResizeControlLineProps = ResizeControlProps & {