refactor(onDrag): use same api as onNodeDragStart

This commit is contained in:
moklick
2021-01-27 10:35:06 +01:00
parent 3dedd615af
commit 477be8d492
5 changed files with 15 additions and 13 deletions

View File

@@ -3,6 +3,7 @@ import React, { useState } from 'react';
import ReactFlow, { removeElements, addEdge, MiniMap, Controls, Background, isNode } from 'react-flow-renderer';
const onNodeDragStart = (event, node) => console.log('drag start', node);
const onNodeDrag = (event, node) => console.log('drag', node);
const onNodeDragStop = (event, node) => console.log('drag stop', node);
const onPaneClick = (event) => console.log('pane click', event);
const onPaneScroll = (event) => console.log('pane scroll', event);
@@ -132,6 +133,7 @@ const OverviewFlow = () => {
onPaneScroll={onPaneScroll}
onPaneContextMenu={onPaneContextMenu}
onNodeDragStart={onNodeDragStart}
onNodeDrag={onNodeDrag}
onNodeDragStop={onNodeDragStop}
onSelectionDragStart={onSelectionDragStart}
onSelectionDrag={onSelectionDrag}

View File

@@ -126,18 +126,22 @@ export default (NodeComponent: ComponentType<NodeComponentProps>) => {
);
const onDrag = useCallback(
(event: DraggableEvent, draggbleData: DraggableData) => {
onNodeDrag?.(event as MouseEvent, id, draggbleData);
(event: DraggableEvent, draggableData: DraggableData) => {
if (onNodeDrag) {
node.position.x += draggableData.deltaX;
node.position.y += draggableData.deltaY;
onNodeDrag(event as MouseEvent, node);
}
updateNodePosDiff({
id,
diff: {
x: draggbleData.deltaX,
y: draggbleData.deltaY,
x: draggableData.deltaX,
y: draggableData.deltaY,
},
});
},
[id]
[id, node, onNodeDrag]
);
const onDragStop = useCallback(

View File

@@ -1,9 +1,8 @@
import React, { memo, useMemo, ComponentType, MouseEvent } from 'react';
import { DraggableData } from 'react-draggable';
import { getNodesInside } from '../../utils/graph';
import { useStoreState, useStoreActions } from '../../store/hooks';
import { Node, NodeTypesType, WrapNodeProps, Edge, ElementId } from '../../types';
import { Node, NodeTypesType, WrapNodeProps, Edge } from '../../types';
interface NodeRendererProps {
nodeTypes: NodeTypesType;
selectNodesOnDrag: boolean;
@@ -13,7 +12,7 @@ interface NodeRendererProps {
onNodeMouseLeave?: (event: MouseEvent, node: Node) => void;
onNodeContextMenu?: (event: MouseEvent, node: Node) => void;
onNodeDragStart?: (event: MouseEvent, node: Node) => void;
onNodeDrag?: (event: MouseEvent, nodeId: ElementId, data: DraggableData) => void;
onNodeDrag?: (event: MouseEvent, node: Node) => void;
onNodeDragStop?: (event: MouseEvent, node: Node) => void;
snapToGrid: boolean;
snapGrid: [number, number];

View File

@@ -1,6 +1,5 @@
import React, { useMemo, CSSProperties, HTMLAttributes, MouseEvent, WheelEvent } from 'react';
import cc from 'classcat';
import { DraggableData } from 'react-draggable';
import GraphView from '../GraphView';
import ElementUpdater from '../../components/ElementUpdater';
@@ -32,7 +31,6 @@ import {
PanOnScrollMode,
OnEdgeUpdateFunc,
NodeExtent,
ElementId,
} from '../../types';
import '../../style.css';
@@ -60,7 +58,7 @@ export interface ReactFlowProps extends Omit<HTMLAttributes<HTMLDivElement>, 'on
onNodeMouseLeave?: (event: MouseEvent, node: Node) => void;
onNodeContextMenu?: (event: MouseEvent, node: Node) => void;
onNodeDragStart?: (event: MouseEvent, node: Node) => void;
onNodeDrag?: (event: MouseEvent, nodeId: ElementId, data: DraggableData) => void;
onNodeDrag?: (event: MouseEvent, node: Node) => void;
onNodeDragStop?: (event: MouseEvent, node: Node) => void;
onConnect?: (connection: Edge | Connection) => void;
onConnectStart?: OnConnectStartFunc;

View File

@@ -1,5 +1,4 @@
import { CSSProperties, MouseEvent as ReactMouseEvent } from 'react';
import { DraggableData } from 'react-draggable';
export type ElementId = string;
@@ -221,7 +220,7 @@ export interface WrapNodeProps<T = any> {
onMouseLeave?: (event: ReactMouseEvent, node: Node) => void;
onContextMenu?: (event: ReactMouseEvent, node: Node) => void;
onNodeDragStart?: (event: ReactMouseEvent, node: Node) => void;
onNodeDrag?: (event: ReactMouseEvent, nodeId: ElementId, data: DraggableData) => void;
onNodeDrag?: (event: ReactMouseEvent, node: Node) => void;
onNodeDragStop?: (event: ReactMouseEvent, node: Node) => void;
style?: CSSProperties;
className?: string;