Skip to content

Commit e445882

Browse files
committed
Add 'canMoveNode(INode)'.
1 parent 3f37b6f commit e445882

File tree

3 files changed

+15
-1
lines changed

3 files changed

+15
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ All props are detailed below.
245245
| `canDeleteSelected` | `func` | `false` | takes the place of `canDeleteNode` and `canDeleteEdge`. It accepts a `SelectionT` type as a parameter. It is called before a node or edge is deleted. The function should return a boolean.
246246
| `canCreateEdge` | `func` | `false` | Called before an edge is created.|
247247
| `canSwapEdge` | `func` | `false` | Called before an edge 'target' is swapped.
248+
| `canMoveNode` | `func` | `false` | Called before a node is moved (e.g. by being dragged). |
248249
| `afterRenderEdge` | `func` | `false` | Called after an edge is rendered. |
249250
| `renderNode` | `func` | `false` | Called to render node geometry. |
250251
| `renderNodeText` | `func` | `false` | Called to render the node text |

src/components/graph-view-props.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ export type IGraphViewProps = {
7171
hoveredNode: INode | null,
7272
swapEdge: IEdge
7373
) => boolean,
74+
canMoveNode?: (node: INode) => boolean,
7475
onBackgroundClick?: (x: number, y: number, event: any) => void,
7576
onCopySelected?: () => void,
7677
onCreateEdge?: (sourceNode: INode, targetNode: INode) => void,

src/components/graph-view.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ class GraphView extends React.Component<IGraphViewProps, IGraphViewState> {
7979
canCreateEdge: (startNode?: INode, endNode?: INode) => true,
8080
canSwapEdge: () => true,
8181
canDeleteSelected: () => true,
82+
canMoveNode: (node: INode) => true,
8283
allowMultiselect: true,
8384
edgeArrowSize: 8,
8485
gridSpacing: 36,
@@ -862,7 +863,14 @@ class GraphView extends React.Component<IGraphViewProps, IGraphViewState> {
862863
}
863864

864865
handleNodeMove = (position: IPoint, nodeId: string, shiftKey: boolean) => {
865-
const { canCreateEdge, readOnly, selected, nodeKey, onSelect } = this.props;
866+
const {
867+
canCreateEdge,
868+
canMoveNode,
869+
readOnly,
870+
selected,
871+
nodeKey,
872+
onSelect,
873+
} = this.props;
866874
const { draggingEdge, nodesMap } = this.state;
867875
const nodeMapNode: INodeMapNode | null = this.getNodeById(nodeId);
868876

@@ -872,6 +880,10 @@ class GraphView extends React.Component<IGraphViewProps, IGraphViewState> {
872880

873881
const node = nodeMapNode.node;
874882

883+
if (canMoveNode && !canMoveNode(node)) {
884+
return;
885+
}
886+
875887
if (!shiftKey && !draggingEdge) {
876888
const originalX = node.x || 0;
877889
const originalY = node.y || 0;

0 commit comments

Comments
 (0)