feat(edgeUpdate): add onEdgeUpdateStart handler closes #1120

This commit is contained in:
moklick
2021-04-30 16:09:46 +02:00
parent b2213bd9b5
commit 3232a33e9e
6 changed files with 21 additions and 2 deletions
+9 -1
View File
@@ -49,6 +49,7 @@ const initialElements: Elements = [
]; ];
const onLoad = (reactFlowInstance: OnLoadParams) => reactFlowInstance.fitView(); const onLoad = (reactFlowInstance: OnLoadParams) => reactFlowInstance.fitView();
const onEdgeUpdateStart = (_: React.MouseEvent, edge: Edge) => console.log('start update', edge);
const UpdatableEdge = () => { const UpdatableEdge = () => {
const [elements, setElements] = useState<Elements>(initialElements); const [elements, setElements] = useState<Elements>(initialElements);
@@ -57,7 +58,14 @@ const UpdatableEdge = () => {
const onConnect = (params: Connection | Edge) => setElements((els) => addEdge(params, els)); const onConnect = (params: Connection | Edge) => setElements((els) => addEdge(params, els));
return ( return (
<ReactFlow elements={elements} onLoad={onLoad} snapToGrid={true} onEdgeUpdate={onEdgeUpdate} onConnect={onConnect}> <ReactFlow
elements={elements}
onLoad={onLoad}
snapToGrid={true}
onEdgeUpdate={onEdgeUpdate}
onConnect={onConnect}
onEdgeUpdateStart={onEdgeUpdateStart}
>
<Controls /> <Controls />
</ReactFlow> </ReactFlow>
); );
+4 -1
View File
@@ -44,6 +44,7 @@ export default (EdgeComponent: ComponentType<EdgeProps>) => {
onMouseMove, onMouseMove,
onMouseLeave, onMouseLeave,
edgeUpdaterRadius, edgeUpdaterRadius,
onEdgeUpdateStart,
}: WrapEdgeProps): JSX.Element | null => { }: WrapEdgeProps): JSX.Element | null => {
const addSelectedElements = useStoreActions((actions) => actions.addSelectedElements); const addSelectedElements = useStoreActions((actions) => actions.addSelectedElements);
const setConnectionNodeId = useStoreActions((actions) => actions.setConnectionNodeId); const setConnectionNodeId = useStoreActions((actions) => actions.setConnectionNodeId);
@@ -138,6 +139,8 @@ export default (EdgeComponent: ComponentType<EdgeProps>) => {
const isValidConnection = () => true; const isValidConnection = () => true;
const isTarget = isSourceHandle; const isTarget = isSourceHandle;
onEdgeUpdateStart?.(event, edgeElement);
onMouseDown( onMouseDown(
event, event,
handleId, handleId,
@@ -150,7 +153,7 @@ export default (EdgeComponent: ComponentType<EdgeProps>) => {
connectionMode connectionMode
); );
}, },
[id, source, target, type, sourceHandleId, targetHandleId, setConnectionNodeId, setPosition] [id, source, target, type, sourceHandleId, targetHandleId, setConnectionNodeId, setPosition, edgeElement]
); );
const onEdgeUpdaterSourceMouseDown = useCallback( const onEdgeUpdaterSourceMouseDown = useCallback(
+2
View File
@@ -34,6 +34,7 @@ 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;
edgeUpdaterRadius?: number; edgeUpdaterRadius?: number;
} }
@@ -175,6 +176,7 @@ const Edge = ({
onMouseLeave={props.onEdgeMouseLeave} onMouseLeave={props.onEdgeMouseLeave}
edgeUpdaterRadius={props.edgeUpdaterRadius} edgeUpdaterRadius={props.edgeUpdaterRadius}
onEdgeDoubleClick={props.onEdgeDoubleClick} onEdgeDoubleClick={props.onEdgeDoubleClick}
onEdgeUpdateStart={props.onEdgeUpdateStart}
/> />
); );
}; };
+2
View File
@@ -92,6 +92,7 @@ const GraphView = ({
onEdgeMouseMove, onEdgeMouseMove,
onEdgeMouseLeave, onEdgeMouseLeave,
edgeUpdaterRadius, edgeUpdaterRadius,
onEdgeUpdateStart,
}: GraphViewProps) => { }: GraphViewProps) => {
const isInitialized = useRef<boolean>(false); const isInitialized = useRef<boolean>(false);
const setOnConnect = useStoreActions((actions) => actions.setOnConnect); const setOnConnect = useStoreActions((actions) => actions.setOnConnect);
@@ -275,6 +276,7 @@ const GraphView = ({
onEdgeMouseEnter={onEdgeMouseEnter} onEdgeMouseEnter={onEdgeMouseEnter}
onEdgeMouseMove={onEdgeMouseMove} onEdgeMouseMove={onEdgeMouseMove}
onEdgeMouseLeave={onEdgeMouseLeave} onEdgeMouseLeave={onEdgeMouseLeave}
onEdgeUpdateStart={onEdgeUpdateStart}
edgeUpdaterRadius={edgeUpdaterRadius} edgeUpdaterRadius={edgeUpdaterRadius}
/> />
</FlowRenderer> </FlowRenderer>
+3
View File
@@ -115,6 +115,7 @@ export interface ReactFlowProps extends Omit<HTMLAttributes<HTMLDivElement>, 'on
onEdgeMouseMove?: (event: MouseEvent, edge: Edge) => void; onEdgeMouseMove?: (event: MouseEvent, edge: Edge) => void;
onEdgeMouseLeave?: (event: MouseEvent, edge: Edge) => void; onEdgeMouseLeave?: (event: MouseEvent, edge: Edge) => void;
onEdgeDoubleClick?: (event: MouseEvent, edge: Edge) => void; onEdgeDoubleClick?: (event: MouseEvent, edge: Edge) => void;
onEdgeUpdateStart?: (event: MouseEvent, edge: Edge) => void;
edgeUpdaterRadius?: number; edgeUpdaterRadius?: number;
nodeTypesId?: string; nodeTypesId?: string;
edgeTypesId?: string; edgeTypesId?: string;
@@ -192,6 +193,7 @@ const ReactFlow = forwardRef<ReactFlowRefType, ReactFlowProps>(
onEdgeMouseEnter, onEdgeMouseEnter,
onEdgeMouseMove, onEdgeMouseMove,
onEdgeMouseLeave, onEdgeMouseLeave,
onEdgeUpdateStart,
edgeUpdaterRadius = 10, edgeUpdaterRadius = 10,
nodeTypesId = '1', nodeTypesId = '1',
edgeTypesId = '1', edgeTypesId = '1',
@@ -270,6 +272,7 @@ const ReactFlow = forwardRef<ReactFlowRefType, ReactFlowProps>(
onEdgeMouseEnter={onEdgeMouseEnter} onEdgeMouseEnter={onEdgeMouseEnter}
onEdgeMouseMove={onEdgeMouseMove} onEdgeMouseMove={onEdgeMouseMove}
onEdgeMouseLeave={onEdgeMouseLeave} onEdgeMouseLeave={onEdgeMouseLeave}
onEdgeUpdateStart={onEdgeUpdateStart}
edgeUpdaterRadius={edgeUpdaterRadius} edgeUpdaterRadius={edgeUpdaterRadius}
/> />
<ElementUpdater elements={elements} /> <ElementUpdater elements={elements} />
+1
View File
@@ -131,6 +131,7 @@ export interface WrapEdgeProps<T = any> {
onMouseMove?: (event: React.MouseEvent, edge: Edge) => void; onMouseMove?: (event: React.MouseEvent, edge: Edge) => void;
onMouseLeave?: (event: React.MouseEvent, edge: Edge) => void; onMouseLeave?: (event: React.MouseEvent, edge: Edge) => void;
edgeUpdaterRadius?: number; edgeUpdaterRadius?: number;
onEdgeUpdateStart?: (event: React.MouseEvent, edge: Edge) => void;
} }
export interface EdgeProps<T = any> { export interface EdgeProps<T = any> {