react-flowchart-designer
v2.0.2
Published
A lightweight component to design flowcharts. Check out the [demo](https://d5y3kk.csb.app/) for some examples.
Downloads
13
Readme
A lightweight component to design flowcharts. Check out the demo for some examples.
Features
- Different shapes of nodes.
- Add/Remove/Move nodes
- Add/Remove/Reshape links between nodes
- Enable/Disable adding/editting/removing links
- Zoom and Pan
- Raw or typed input/output
Usage
Install react-flowchart-designer
using npm.
npm install react-flowchart-designer
Then you can just import the component and its hook:
import { Flowchart, useFlowchart } from 'react-flowchart-designer';
and use it as below:
const { setHandles, flowchart } = useFlowchart();
<button onClick={() => { flowchart.addRectNode(50, 50, 'my node') }}>Add Node</button>
<Flowchart setHandles={setHandles} width='700px' height='400px' editable={true} />
Clicking the button creates a new node at x = 50, y = 50
. Drag the orange square from one node to another to add links.
Mouse and Keyboard events
- click: Edit/Stop Edit Links - Select Node/Link
- double click: Edit Node/Link text
- mouse wheel: Zoom
- mouse drag: Pan - Move Node/Link
- Delete key: Delete Node/Link
Loading/Saving a Flowchart
Load/save a flowchart using the data model below:
const load = () => {
let nodes = [
{ id: 1, text: 'node1', X: 50, Y: 50 },
{ id: 2, text: 'node2', X: 150, Y: 50 },
];
let links = [
{ from: 1, to: 2 },
{ from: 2, to: 2 },
];
flowchart.addNodes(nodes, links);
}
const save = () => console.log(flowchart.getData()) // { nodes: […], links: […] }
<button onClick={load}>Load</button>
<button onClick={save}>Save</button>
Props
The following props can be defined on Flowchart
:
| Prop | Type | Description | Default |
|---|---|---|---|
| width
* | string
| Flowchart width | |
| height
* | string
| Flowchart height | |
| editable
| boolean
| Enable/Disable adding/removing links | false
|
| onReady
| FlowchartHandles => any
| When the flowchart is mounted | |
(*) required props
Handles
You can access the handles using the Flowchart
object as follows:
<button onClick={() => { flowchart!.addRhomNode(100, 100, txt) }}>Add Rhombus Node</button>
Below is a list of all handles:
| Handle | Type | Description |
|---|---|---|
| addRectNode
| (left: number, top: number, text: string, id?: number, color?: string) => number
| Adds a rectangle node at (left, top)
, returns its id
|
| addCircleNode
|(left: number, top: number, text: string, id?: number, color?: string) => number
| Adds a circle node at (left, top)
, returns its id
|
| addRhomNode
| (left: number, top: number, text: string, id?: number, color?: string) => number
| Adds a rhombus node at (left, top)
, returns its id
|
| addNodes
| (nodes: NodeData[], links?: LinkData[]) => void
| Adds multiple nodes and links (see Loading a Flowchart) |
| getData
| () => { nodes: NodeData[], links: LinkData[] }
| Gets all nodes and links (see Saving a Flowchart) |
| changeLinkType
|(id: number, type: string) => void
| Changes the type of a link (solid/dashed)
Node
Below is the data model for nodes:
| Prop | Type | Description | Default |
|---|---|---|---|
| id
| number
| Node identifier | |
| X
* | number
| The x
position of the node | |
| Y
* | number
| The y
position of the node | |
| text
* | string
| Node text | |
| color
| string
| Node color | white |
| shape
| string
| Node shape can be rectangle
, circle
, or rhombus
| rectangle
|
(*) required props
Link
Below is the data model for links:
| Prop | Type | Description | Default |
|---|---|---|---|
| from
* | number
| The id
of the origin node | |
| to
* | number
| The id
of the destination node | |
| text
| string
| Link label | |
| type
| string
| Link type (solid/dashed) | solid |
| meta
| object
| Information about the shape of the link | |
(*) required props
Contributing
- Fork the project.
- Make changes.
- Run the project in development mode:
npm run ladle
. - Write your own tests and/or update existing ones in src/flowchart/test dir.
- Check the new features and changes using
flowchart.stories.tsx
or your own Stories (*.stories.tsx
). - Update README with appropriate docs.
- Commit and PR
Dependencies
React Flowchart has no dependency. However the following peer dependencies must be specified by your project in order to avoid version conflicts:
react
,
react-dom
.
NPM will not automatically install these for you but it will show you a warning message with instructions on how to install them.