Merge pull request #2066 from wbkd/feature/edgeUpdateWithMoreInfo-1961

Feature/edge update with more info 1961
This commit is contained in:
Moritz Klack
2022-04-11 13:39:10 +02:00
committed by GitHub
5 changed files with 19 additions and 13 deletions
+5 -2
View File
@@ -11,6 +11,7 @@ import ReactFlow, {
Node, Node,
NodeChange, NodeChange,
EdgeChange, EdgeChange,
HandleType,
} from 'react-flow-renderer'; } from 'react-flow-renderer';
const initialNodes: Node[] = [ const initialNodes: Node[] = [
@@ -54,8 +55,10 @@ const initialNodes: Node[] = [
const initialEdges = [{ id: 'e1-2', source: '1', target: '2', label: 'This is a draggable edge' }]; const initialEdges = [{ id: 'e1-2', source: '1', target: '2', label: 'This is a draggable edge' }];
const onInit = (reactFlowInstance: ReactFlowInstance) => reactFlowInstance.fitView(); const onInit = (reactFlowInstance: ReactFlowInstance) => reactFlowInstance.fitView();
const onEdgeUpdateStart = (_: React.MouseEvent, edge: Edge) => console.log('start update', edge); const onEdgeUpdateStart = (_: React.MouseEvent, edge: Edge, handleType: HandleType) =>
const onEdgeUpdateEnd = (_: MouseEvent, edge: Edge) => console.log('end update', edge); console.log(`start update ${handleType} handle`, edge);
const onEdgeUpdateEnd = (_: MouseEvent, edge: Edge, handleType: HandleType) =>
console.log(`end update ${handleType} handle`, edge);
const UpdatableEdge = () => { const UpdatableEdge = () => {
const [nodes, setNodes] = useState<Node[]>(initialNodes); const [nodes, setNodes] = useState<Node[]>(initialNodes);
+4 -3
View File
@@ -141,13 +141,14 @@ export default (EdgeComponent: ComponentType<EdgeProps>) => {
(event: React.MouseEvent<SVGGElement, MouseEvent>, isSourceHandle: boolean) => { (event: React.MouseEvent<SVGGElement, MouseEvent>, isSourceHandle: boolean) => {
const nodeId = isSourceHandle ? target : source; const nodeId = isSourceHandle ? target : source;
const handleId = isSourceHandle ? targetHandleId : sourceHandleId; const handleId = isSourceHandle ? targetHandleId : sourceHandleId;
const handleType = isSourceHandle ? 'target' : 'source';
const isValidConnection = () => true; const isValidConnection = () => true;
const isTarget = isSourceHandle; const isTarget = isSourceHandle;
onEdgeUpdateStart?.(event, edgeElement); onEdgeUpdateStart?.(event, edgeElement, handleType);
const _onEdgeUpdate = onEdgeUpdateEnd const _onEdgeUpdate = onEdgeUpdateEnd
? (evt: MouseEvent): void => onEdgeUpdateEnd(evt, edgeElement) ? (evt: MouseEvent): void => onEdgeUpdateEnd(evt, edgeElement, handleType)
: undefined; : undefined;
const onConnectEdge = (connection: Connection) => { const onConnectEdge = (connection: Connection) => {
@@ -168,7 +169,7 @@ export default (EdgeComponent: ComponentType<EdgeProps>) => {
isTarget, isTarget,
isValidConnection, isValidConnection,
connectionMode, connectionMode,
isSourceHandle ? 'target' : 'source', handleType,
_onEdgeUpdate, _onEdgeUpdate,
store.getState store.getState
); );
+3 -2
View File
@@ -13,6 +13,7 @@ import {
ConnectionLineComponent, ConnectionLineComponent,
ConnectionMode, ConnectionMode,
OnEdgeUpdateFunc, OnEdgeUpdateFunc,
HandleType,
ReactFlowState, ReactFlowState,
} from '../../types'; } from '../../types';
import useVisibleEdges from '../../hooks/useVisibleEdges'; import useVisibleEdges from '../../hooks/useVisibleEdges';
@@ -31,8 +32,8 @@ interface EdgeRendererProps {
onEdgeMouseEnter?: (event: React.MouseEvent, edge: Edge) => void; onEdgeMouseEnter?: (event: React.MouseEvent, edge: Edge) => void;
onEdgeMouseMove?: (event: React.MouseEvent, edge: Edge) => void; onEdgeMouseMove?: (event: React.MouseEvent, edge: Edge) => void;
onEdgeMouseLeave?: (event: React.MouseEvent, edge: Edge) => void; onEdgeMouseLeave?: (event: React.MouseEvent, edge: Edge) => void;
onEdgeUpdateStart?: (event: React.MouseEvent, edge: Edge) => void; onEdgeUpdateStart?: (event: React.MouseEvent, edge: Edge, handleType: HandleType) => void;
onEdgeUpdateEnd?: (event: MouseEvent, edge: Edge) => void; onEdgeUpdateEnd?: (event: MouseEvent, edge: Edge, handleType: HandleType) => void;
edgeUpdaterRadius?: number; edgeUpdaterRadius?: number;
noPanClassName?: string; noPanClassName?: string;
} }
+3 -2
View File
@@ -31,6 +31,7 @@ import {
OnMoveStart, OnMoveStart,
OnMoveEnd, OnMoveEnd,
} from '.'; } from '.';
import { HandleType } from './handles';
export interface ReactFlowProps extends HTMLAttributes<HTMLDivElement> { export interface ReactFlowProps extends HTMLAttributes<HTMLDivElement> {
nodes?: Node[]; nodes?: Node[];
@@ -106,8 +107,8 @@ export interface ReactFlowProps extends HTMLAttributes<HTMLDivElement> {
onEdgeMouseMove?: (event: ReactMouseEvent, edge: Edge) => void; onEdgeMouseMove?: (event: ReactMouseEvent, edge: Edge) => void;
onEdgeMouseLeave?: (event: ReactMouseEvent, edge: Edge) => void; onEdgeMouseLeave?: (event: ReactMouseEvent, edge: Edge) => void;
onEdgeDoubleClick?: (event: ReactMouseEvent, edge: Edge) => void; onEdgeDoubleClick?: (event: ReactMouseEvent, edge: Edge) => void;
onEdgeUpdateStart?: (event: ReactMouseEvent, edge: Edge) => void; onEdgeUpdateStart?: (event: ReactMouseEvent, edge: Edge, handleType: HandleType) => void;
onEdgeUpdateEnd?: (event: MouseEvent, edge: Edge) => void; onEdgeUpdateEnd?: (event: MouseEvent, edge: Edge, handleType: HandleType) => void;
edgeUpdaterRadius?: number; edgeUpdaterRadius?: number;
noDragClassName?: string; noDragClassName?: string;
noWheelClassName?: string; noWheelClassName?: string;
+4 -4
View File
@@ -1,6 +1,6 @@
import { CSSProperties, HTMLAttributes, ReactNode } from 'react'; import React, { CSSProperties, HTMLAttributes, ReactNode } from 'react';
import { Connection } from './general'; import { Connection } from './general';
import { HandleElement } from './handles'; import { HandleElement, HandleType } from './handles';
import { Node } from './nodes'; import { Node } from './nodes';
import { Position } from './utils'; import { Position } from './utils';
@@ -117,8 +117,8 @@ export interface WrapEdgeProps<T = any> {
onMouseMove?: EdgeMouseHandler; onMouseMove?: EdgeMouseHandler;
onMouseLeave?: EdgeMouseHandler; onMouseLeave?: EdgeMouseHandler;
edgeUpdaterRadius?: number; edgeUpdaterRadius?: number;
onEdgeUpdateStart?: EdgeMouseHandler; onEdgeUpdateStart?: (event: React.MouseEvent, edge: Edge, handleType: HandleType) => void;
onEdgeUpdateEnd?: (event: MouseEvent, edge: Edge) => void; onEdgeUpdateEnd?: (event: MouseEvent, edge: Edge, handleType: HandleType) => void;
markerStart?: EdgeMarkerType; markerStart?: EdgeMarkerType;
markerEnd?: EdgeMarkerType; markerEnd?: EdgeMarkerType;
} }