A library for creating directed graph editors
A React component which makes it easy to create a directed graph editor without implementing any of the SVG drawing or event handling logic.
Version 8.0.0 introduces multi-select nodes and edges using Ctrl-Shift-Mouse events (Cmd-Shift-mouse for Mac). This requires a breaking change. Instead of onSelectNode/Edge, you'll only provide one onSelect function callback and a selected object with { nodes: Map, and edges: Map } as the parameter format. The typings folder has the exact type definition for these attributes. When either edges or nodes are selected the onSelect function will fire with the object. You will have to handle all nodes and edges selected, or if there is only one then you will have to determine if it's a node or edge within the onSelect function.
To disable multi-select you can set allowMultiselect to false, which disables the Ctrl-Shift-mouse event, but we will still use the onSelect function. Both onSelectNode and onSelectEdge are deprecated.
Breaking changes:
onPasteSelected now accepts a SelectionT object for the first parameteronPasteSelected now accepts an IPoint instead
of a XYCoords array for the second parameter.onDeleteSelected is added which takes a SelectionT parameter.onSelect is added, which accepts SelectionT and Event parameters.onUpdateNode accepts a Map of updated nodes in the second parameter (for example, if multiple nodes are moved).selected is a new property to track selected nodes and edges. It is a SelectionT type.canDeleteSelected takes the place of canDeleteNode and canDeleteEdge. It accepts a SelectionT type as a parameter.onDeleteNode is removedonDeleteEdge is removedselectedNode is removedselectedEdge is removedcanDeleteNode is removedcanDeleteEdge is removedselectedNodes is removedselectedEdges is removednpm install --save react-digraphIf you don't have the following peerDependenies, make sure to install them:
npm install --save react react-domThe default export is a component called GraphView; it provides a multitude of hooks for various graph editing operations and a set of controls for zooming. Typically, it should be wrapped in a higher order component that supplies various callbacks (onCreateNode, onCreateEdge etc...).
GraphView expects several properties to exist on your nodes and edges. If these types conflict with existing properties on your data, you must transform your data to re-key these properties under different names and to add the expected properties. All nodes and edges can have a type attribute set - nodes also support a subtype attribute. For a full description of node and edge properties, see the sections for INode and IEdge below.
Configuration for nodes and edges can be passed to GraphView via the nodeTypes, nodeSubtypes, and edgeTypes props. Custom SVG elements can be defined here for the node's type/subtype and the edge's type.
It is often convenient to combine these types into a configuration object that can be referred to elsewhere in the application and used to associate events fired from nodes/edges in the GraphView with other actions in the application. Here is an abbreviated example:
…A typical graph that would be stored in the Graph component's state looks something like this:
…For a detailed example, check out src/examples/graph.js. To run the example:
npm install
npm run exampleA webpage will open in your default browser automatically.
All props are detailed below.
| Prop | Type | Required | Notes |
|---|---|---|---|
nodeKey |
string |
true |
Key for D3 to update nodes(typ. UUID). |
nodes |
Array<INode> |
true |
Array of graph nodes. |
edges |
Array<IEdge> |
true |
Array of graph edges. |
allowCopyEdges |
boolean |
false |
(default false) Allow onCopySelected to be called when an edge is selected without any nodes. |
allowMultiselect |
boolean |
false |
(default true) Use Ctrl-Shift-LeftMouse to draw a multiple selection box. |
selected |
object |
true |
The currently selected graph entity. |
nodeTypes |
object |
true |
Config object of available node types. |
nodeSubtypes |
object |
true |
Config object of available node subtypes. |
edgeTypes |
object |
true |
Config object of available edge types. |
onSelect |
func |
false |
Called when nodes are selected when allowMultiselect is true. Is passed an object with nodes and edges included. |
onCreateNode |
func |
true |
Called when a node is created. |
onContextMenu |
func |
true |
Called when contextmenu event triggered. |
onUpdateNode |
func |
true |
Called when a node is moved. |
onCreateEdge |
func |
true |
Called when an edge is created. |
onSwapEdge |
func |
true |
Called when an edge 'target' is swapped. |
onBackgroundClick |
func |
false |
Called when the background is clicked. |
onArrowClicked |
func |
false |
Called when the arrow head is clicked. |
onUndo |
func |
false |
A function called when Ctrl-Z is activated. React-digraph does not keep track of actions, this must be implemented in the client website. |
onCopySelected |
func |
false |
A function called when Ctrl-C is activated. React-digraph does not keep track of copied nodes or edges, the this must be implemented in the client website. |
onPasteSelected |
func |
false |
A function called when Ctrl-V is activated. React-digraph does not keep track of copied nodes or edges, the this must be implemented in the client website. |
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. |
canCreateEdge |
func |
false |
Called before an edge is created. |
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 |
renderDefs |
func |
false |
Called to render SVG definitions. |
renderBackground |
func |
false |
Called to render SVG background. |
readOnly |
bool |
false |
Disables all graph editing interactions. |
disableBackspace |
bool |
false |
Disables using backspace to delete the selected node. |
maxTitleChars |
number |
false |
Truncates node title characters. |
gridSize |
number |
false |
Overall grid size. |
gridSpacing |
number |
false |
Grid spacing. |
gridDotSize |
number |
false |
Grid dot size. |
minZoom |
`num |
No open issues yet, or sync has not completed.