diff --git a/README.md b/README.md index b538b1d3..34a4300c 100644 --- a/README.md +++ b/README.md @@ -217,6 +217,7 @@ All props are detailed below. | `canDeleteNode` | `func` | `false` | Called before a node is deleted. | | `canCreateEdge` | `func` | `false` | Called before an edge is created. | | `canDeleteEdge` | `func` | `false` | Called before an edge is deleted. | +| `canSwapEdge` | `func` | `false` | Called before an edge 'target' is swapped. | `afterRenderEdge` | `func` | `false` | Called after an edge is rendered. | | `renderNode` | `func` | `false` | Called to render node geometry. | | `renderNodeText` | `func` | `false` | Called to render the node text | @@ -289,6 +290,7 @@ Prop Types: canDeleteNode?: (selected: any) => boolean; canDeleteEdge?: (selected: any) => boolean; canCreateEdge?: (startNode?: INode, endNode?: INode) => boolean; + canSwapEdge?: (sourceNode: INode, targetNode: INode, edge: IEdge) => boolean; afterRenderEdge?: (id: string, element: any, edge: IEdge, edgeContainer: any, isEdgeSelected: boolean) => void; onUndo?: () => void; onCopySelected?: () => void; diff --git a/src/components/graph-view.js b/src/components/graph-view.js index 25b930ba..5409182d 100644 --- a/src/components/graph-view.js +++ b/src/components/graph-view.js @@ -64,6 +64,7 @@ type IGraphViewState = { class GraphView extends React.Component { static defaultProps = { canCreateEdge: (startNode?: INode, endNode?: INode) => true, + canSwapEdge: () => true, canDeleteEdge: () => true, canDeleteNode: () => true, edgeArrowSize: 8, @@ -456,7 +457,8 @@ class GraphView extends React.Component { hoveredNode && sourceNode !== hoveredNode && (swapEdge.source !== sourceNode[this.props.nodeKey] || - swapEdge.target !== hoveredNode[this.props.nodeKey]) + swapEdge.target !== hoveredNode[this.props.nodeKey]) && + canSwapEdge(sourceNode, hoveredNode, swapEdge) ); }