feat(props): add onEdgeUpdateEnd handler closes #1157
This commit is contained in:
@@ -51,6 +51,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 onEdgeUpdateStart = (_: React.MouseEvent, edge: Edge) => console.log('start update', edge);
|
||||||
|
const onEdgeUpdateEnd = (_: MouseEvent, edge: Edge) => console.log('end update', edge);
|
||||||
|
|
||||||
const UpdatableEdge = () => {
|
const UpdatableEdge = () => {
|
||||||
const [elements, setElements] = useState<Elements>(initialElements);
|
const [elements, setElements] = useState<Elements>(initialElements);
|
||||||
@@ -68,6 +69,7 @@ const UpdatableEdge = () => {
|
|||||||
onConnect={onConnect}
|
onConnect={onConnect}
|
||||||
onEdgeUpdateStart={onEdgeUpdateStart}
|
onEdgeUpdateStart={onEdgeUpdateStart}
|
||||||
onElementsRemove={onElementsRemove}
|
onElementsRemove={onElementsRemove}
|
||||||
|
onEdgeUpdateEnd={onEdgeUpdateEnd}
|
||||||
>
|
>
|
||||||
<Controls />
|
<Controls />
|
||||||
</ReactFlow>
|
</ReactFlow>
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ export default (EdgeComponent: ComponentType<EdgeProps>) => {
|
|||||||
onMouseLeave,
|
onMouseLeave,
|
||||||
edgeUpdaterRadius,
|
edgeUpdaterRadius,
|
||||||
onEdgeUpdateStart,
|
onEdgeUpdateStart,
|
||||||
|
onEdgeUpdateEnd,
|
||||||
}: 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);
|
||||||
@@ -141,6 +142,10 @@ export default (EdgeComponent: ComponentType<EdgeProps>) => {
|
|||||||
|
|
||||||
onEdgeUpdateStart?.(event, edgeElement);
|
onEdgeUpdateStart?.(event, edgeElement);
|
||||||
|
|
||||||
|
const _onEdgeUpdate = onEdgeUpdateEnd
|
||||||
|
? (evt: MouseEvent): void => onEdgeUpdateEnd(evt, edgeElement)
|
||||||
|
: undefined;
|
||||||
|
|
||||||
onMouseDown(
|
onMouseDown(
|
||||||
event,
|
event,
|
||||||
handleId,
|
handleId,
|
||||||
@@ -151,7 +156,8 @@ export default (EdgeComponent: ComponentType<EdgeProps>) => {
|
|||||||
isTarget,
|
isTarget,
|
||||||
isValidConnection,
|
isValidConnection,
|
||||||
connectionMode,
|
connectionMode,
|
||||||
isSourceHandle ? 'target' : 'source'
|
isSourceHandle ? 'target' : 'source',
|
||||||
|
_onEdgeUpdate
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
[id, source, target, type, sourceHandleId, targetHandleId, setConnectionNodeId, setPosition, edgeElement]
|
[id, source, target, type, sourceHandleId, targetHandleId, setConnectionNodeId, setPosition, edgeElement]
|
||||||
|
|||||||
@@ -97,7 +97,8 @@ export function onMouseDown(
|
|||||||
isTarget: boolean,
|
isTarget: boolean,
|
||||||
isValidConnection: ValidConnectionFunc,
|
isValidConnection: ValidConnectionFunc,
|
||||||
connectionMode: ConnectionMode,
|
connectionMode: ConnectionMode,
|
||||||
elementEdgeUpdaterType?: HandleType | null,
|
elementEdgeUpdaterType?: HandleType,
|
||||||
|
onEdgeUpdateEnd?: (evt: MouseEvent) => void,
|
||||||
onConnectStart?: OnConnectStartFunc,
|
onConnectStart?: OnConnectStartFunc,
|
||||||
onConnectStop?: OnConnectStopFunc,
|
onConnectStop?: OnConnectStopFunc,
|
||||||
onConnectEnd?: OnConnectEndFunc
|
onConnectEnd?: OnConnectEndFunc
|
||||||
@@ -178,6 +179,10 @@ export function onMouseDown(
|
|||||||
|
|
||||||
onConnectEnd?.(event);
|
onConnectEnd?.(event);
|
||||||
|
|
||||||
|
if (elementEdgeUpdaterType && onEdgeUpdateEnd) {
|
||||||
|
onEdgeUpdateEnd(event);
|
||||||
|
}
|
||||||
|
|
||||||
resetRecentHandle(recentHoveredHandle);
|
resetRecentHandle(recentHoveredHandle);
|
||||||
setConnectionNodeId({ connectionNodeId: null, connectionHandleId: null, connectionHandleType: null });
|
setConnectionNodeId({ connectionNodeId: null, connectionHandleId: null, connectionHandleType: null });
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,8 @@ const Handle: FC<HandleProps & Omit<HTMLAttributes<HTMLDivElement>, 'id'>> = ({
|
|||||||
isTarget,
|
isTarget,
|
||||||
isValidConnection,
|
isValidConnection,
|
||||||
connectionMode,
|
connectionMode,
|
||||||
null,
|
undefined,
|
||||||
|
undefined,
|
||||||
onConnectStart,
|
onConnectStart,
|
||||||
onConnectStop,
|
onConnectStop,
|
||||||
onConnectEnd
|
onConnectEnd
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ interface EdgeRendererProps {
|
|||||||
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) => void;
|
||||||
|
onEdgeUpdateEnd?: (event: MouseEvent, edge: Edge) => void;
|
||||||
edgeUpdaterRadius?: number;
|
edgeUpdaterRadius?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,6 +178,7 @@ const Edge = ({
|
|||||||
edgeUpdaterRadius={props.edgeUpdaterRadius}
|
edgeUpdaterRadius={props.edgeUpdaterRadius}
|
||||||
onEdgeDoubleClick={props.onEdgeDoubleClick}
|
onEdgeDoubleClick={props.onEdgeDoubleClick}
|
||||||
onEdgeUpdateStart={props.onEdgeUpdateStart}
|
onEdgeUpdateStart={props.onEdgeUpdateStart}
|
||||||
|
onEdgeUpdateEnd={props.onEdgeUpdateEnd}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ const GraphView = ({
|
|||||||
onEdgeMouseLeave,
|
onEdgeMouseLeave,
|
||||||
edgeUpdaterRadius,
|
edgeUpdaterRadius,
|
||||||
onEdgeUpdateStart,
|
onEdgeUpdateStart,
|
||||||
|
onEdgeUpdateEnd,
|
||||||
}: GraphViewProps) => {
|
}: GraphViewProps) => {
|
||||||
const isInitialized = useRef<boolean>(false);
|
const isInitialized = useRef<boolean>(false);
|
||||||
const setOnConnect = useStoreActions((actions) => actions.setOnConnect);
|
const setOnConnect = useStoreActions((actions) => actions.setOnConnect);
|
||||||
@@ -277,6 +278,7 @@ const GraphView = ({
|
|||||||
onEdgeMouseMove={onEdgeMouseMove}
|
onEdgeMouseMove={onEdgeMouseMove}
|
||||||
onEdgeMouseLeave={onEdgeMouseLeave}
|
onEdgeMouseLeave={onEdgeMouseLeave}
|
||||||
onEdgeUpdateStart={onEdgeUpdateStart}
|
onEdgeUpdateStart={onEdgeUpdateStart}
|
||||||
|
onEdgeUpdateEnd={onEdgeUpdateEnd}
|
||||||
edgeUpdaterRadius={edgeUpdaterRadius}
|
edgeUpdaterRadius={edgeUpdaterRadius}
|
||||||
/>
|
/>
|
||||||
</FlowRenderer>
|
</FlowRenderer>
|
||||||
|
|||||||
@@ -1,4 +1,11 @@
|
|||||||
import React, { useMemo, CSSProperties, HTMLAttributes, MouseEvent, WheelEvent, forwardRef } from 'react';
|
import React, {
|
||||||
|
useMemo,
|
||||||
|
CSSProperties,
|
||||||
|
HTMLAttributes,
|
||||||
|
MouseEvent as ReactMouseEvent,
|
||||||
|
WheelEvent,
|
||||||
|
forwardRef,
|
||||||
|
} from 'react';
|
||||||
import cc from 'classcat';
|
import cc from 'classcat';
|
||||||
|
|
||||||
import GraphView from '../GraphView';
|
import GraphView from '../GraphView';
|
||||||
@@ -51,16 +58,16 @@ const defaultEdgeTypes = {
|
|||||||
|
|
||||||
export interface ReactFlowProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onLoad'> {
|
export interface ReactFlowProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onLoad'> {
|
||||||
elements: Elements;
|
elements: Elements;
|
||||||
onElementClick?: (event: MouseEvent, element: Node | Edge) => void;
|
onElementClick?: (event: ReactMouseEvent, element: Node | Edge) => void;
|
||||||
onElementsRemove?: (elements: Elements) => void;
|
onElementsRemove?: (elements: Elements) => void;
|
||||||
onNodeDoubleClick?: (event: MouseEvent, node: Node) => void;
|
onNodeDoubleClick?: (event: ReactMouseEvent, node: Node) => void;
|
||||||
onNodeMouseEnter?: (event: MouseEvent, node: Node) => void;
|
onNodeMouseEnter?: (event: ReactMouseEvent, node: Node) => void;
|
||||||
onNodeMouseMove?: (event: MouseEvent, node: Node) => void;
|
onNodeMouseMove?: (event: ReactMouseEvent, node: Node) => void;
|
||||||
onNodeMouseLeave?: (event: MouseEvent, node: Node) => void;
|
onNodeMouseLeave?: (event: ReactMouseEvent, node: Node) => void;
|
||||||
onNodeContextMenu?: (event: MouseEvent, node: Node) => void;
|
onNodeContextMenu?: (event: ReactMouseEvent, node: Node) => void;
|
||||||
onNodeDragStart?: (event: MouseEvent, node: Node) => void;
|
onNodeDragStart?: (event: ReactMouseEvent, node: Node) => void;
|
||||||
onNodeDrag?: (event: MouseEvent, node: Node) => void;
|
onNodeDrag?: (event: ReactMouseEvent, node: Node) => void;
|
||||||
onNodeDragStop?: (event: MouseEvent, node: Node) => void;
|
onNodeDragStop?: (event: ReactMouseEvent, node: Node) => void;
|
||||||
onConnect?: (connection: Edge | Connection) => void;
|
onConnect?: (connection: Edge | Connection) => void;
|
||||||
onConnectStart?: OnConnectStartFunc;
|
onConnectStart?: OnConnectStartFunc;
|
||||||
onConnectStop?: OnConnectStopFunc;
|
onConnectStop?: OnConnectStopFunc;
|
||||||
@@ -70,13 +77,13 @@ export interface ReactFlowProps extends Omit<HTMLAttributes<HTMLDivElement>, 'on
|
|||||||
onMoveStart?: (flowTransform?: FlowTransform) => void;
|
onMoveStart?: (flowTransform?: FlowTransform) => void;
|
||||||
onMoveEnd?: (flowTransform?: FlowTransform) => void;
|
onMoveEnd?: (flowTransform?: FlowTransform) => void;
|
||||||
onSelectionChange?: (elements: Elements | null) => void;
|
onSelectionChange?: (elements: Elements | null) => void;
|
||||||
onSelectionDragStart?: (event: MouseEvent, nodes: Node[]) => void;
|
onSelectionDragStart?: (event: ReactMouseEvent, nodes: Node[]) => void;
|
||||||
onSelectionDrag?: (event: MouseEvent, nodes: Node[]) => void;
|
onSelectionDrag?: (event: ReactMouseEvent, nodes: Node[]) => void;
|
||||||
onSelectionDragStop?: (event: MouseEvent, nodes: Node[]) => void;
|
onSelectionDragStop?: (event: ReactMouseEvent, nodes: Node[]) => void;
|
||||||
onSelectionContextMenu?: (event: MouseEvent, nodes: Node[]) => void;
|
onSelectionContextMenu?: (event: ReactMouseEvent, nodes: Node[]) => void;
|
||||||
onPaneScroll?: (event?: WheelEvent) => void;
|
onPaneScroll?: (event?: WheelEvent) => void;
|
||||||
onPaneClick?: (event: MouseEvent) => void;
|
onPaneClick?: (event: ReactMouseEvent) => void;
|
||||||
onPaneContextMenu?: (event: MouseEvent) => void;
|
onPaneContextMenu?: (event: ReactMouseEvent) => void;
|
||||||
nodeTypes?: NodeTypesType;
|
nodeTypes?: NodeTypesType;
|
||||||
edgeTypes?: EdgeTypesType;
|
edgeTypes?: EdgeTypesType;
|
||||||
connectionMode?: ConnectionMode;
|
connectionMode?: ConnectionMode;
|
||||||
@@ -110,12 +117,13 @@ export interface ReactFlowProps extends Omit<HTMLAttributes<HTMLDivElement>, 'on
|
|||||||
panOnScrollMode?: PanOnScrollMode;
|
panOnScrollMode?: PanOnScrollMode;
|
||||||
zoomOnDoubleClick?: boolean;
|
zoomOnDoubleClick?: boolean;
|
||||||
onEdgeUpdate?: OnEdgeUpdateFunc;
|
onEdgeUpdate?: OnEdgeUpdateFunc;
|
||||||
onEdgeContextMenu?: (event: MouseEvent, edge: Edge) => void;
|
onEdgeContextMenu?: (event: ReactMouseEvent, edge: Edge) => void;
|
||||||
onEdgeMouseEnter?: (event: MouseEvent, edge: Edge) => void;
|
onEdgeMouseEnter?: (event: ReactMouseEvent, edge: Edge) => void;
|
||||||
onEdgeMouseMove?: (event: MouseEvent, edge: Edge) => void;
|
onEdgeMouseMove?: (event: ReactMouseEvent, edge: Edge) => void;
|
||||||
onEdgeMouseLeave?: (event: MouseEvent, edge: Edge) => void;
|
onEdgeMouseLeave?: (event: ReactMouseEvent, edge: Edge) => void;
|
||||||
onEdgeDoubleClick?: (event: MouseEvent, edge: Edge) => void;
|
onEdgeDoubleClick?: (event: ReactMouseEvent, edge: Edge) => void;
|
||||||
onEdgeUpdateStart?: (event: MouseEvent, edge: Edge) => void;
|
onEdgeUpdateStart?: (event: ReactMouseEvent, edge: Edge) => void;
|
||||||
|
onEdgeUpdateEnd?: (event: MouseEvent, edge: Edge) => void;
|
||||||
edgeUpdaterRadius?: number;
|
edgeUpdaterRadius?: number;
|
||||||
nodeTypesId?: string;
|
nodeTypesId?: string;
|
||||||
edgeTypesId?: string;
|
edgeTypesId?: string;
|
||||||
@@ -194,6 +202,7 @@ const ReactFlow = forwardRef<ReactFlowRefType, ReactFlowProps>(
|
|||||||
onEdgeMouseMove,
|
onEdgeMouseMove,
|
||||||
onEdgeMouseLeave,
|
onEdgeMouseLeave,
|
||||||
onEdgeUpdateStart,
|
onEdgeUpdateStart,
|
||||||
|
onEdgeUpdateEnd,
|
||||||
edgeUpdaterRadius = 10,
|
edgeUpdaterRadius = 10,
|
||||||
nodeTypesId = '1',
|
nodeTypesId = '1',
|
||||||
edgeTypesId = '1',
|
edgeTypesId = '1',
|
||||||
@@ -273,6 +282,7 @@ const ReactFlow = forwardRef<ReactFlowRefType, ReactFlowProps>(
|
|||||||
onEdgeMouseMove={onEdgeMouseMove}
|
onEdgeMouseMove={onEdgeMouseMove}
|
||||||
onEdgeMouseLeave={onEdgeMouseLeave}
|
onEdgeMouseLeave={onEdgeMouseLeave}
|
||||||
onEdgeUpdateStart={onEdgeUpdateStart}
|
onEdgeUpdateStart={onEdgeUpdateStart}
|
||||||
|
onEdgeUpdateEnd={onEdgeUpdateEnd}
|
||||||
edgeUpdaterRadius={edgeUpdaterRadius}
|
edgeUpdaterRadius={edgeUpdaterRadius}
|
||||||
/>
|
/>
|
||||||
<ElementUpdater elements={elements} />
|
<ElementUpdater elements={elements} />
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ export interface WrapEdgeProps<T = any> {
|
|||||||
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;
|
onEdgeUpdateStart?: (event: React.MouseEvent, edge: Edge) => void;
|
||||||
|
onEdgeUpdateEnd?: (event: MouseEvent, edge: Edge) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface EdgeProps<T = any> {
|
export interface EdgeProps<T = any> {
|
||||||
|
|||||||
Reference in New Issue
Block a user