feat(edges): allow different types

This commit is contained in:
moklick
2019-07-24 23:25:14 +02:00
parent 6312f6bd1e
commit 9d44f26c68
10 changed files with 109 additions and 40 deletions
+28 -24
View File
@@ -1,30 +1,34 @@
import React, { PureComponent } from 'react';
import Edge from './Edge';
import { Consumer } from '../GraphContext';
function renderEdge(e, nodes) {
const sourceNode = nodes.find(n => n.data.id === e.data.source);
const targetNode = nodes.find(n => n.data.id === e.data.target);
if (!sourceNode) {
throw new Error(`couldn't create edge for source id: ${e.data.source}`);
}
if (!targetNode) {
throw new Error(`couldn't create edge for source id: ${e.data.target}`);
}
return (
<Edge
key={`${e.data.source}-${e.data.target}`}
sourceNode={sourceNode}
targetNode={targetNode}
/>
);
}
class EdgeRenderer extends PureComponent {
renderEdge(e, nodes, onElementClick) {
const edgeType = e.data.type || 'default';
const sourceNode = nodes.find(n => n.data.id === e.data.source);
const targetNode = nodes.find(n => n.data.id === e.data.target);
if (!sourceNode) {
throw new Error(`couldn't create edge for source id: ${e.data.source}`);
}
if (!targetNode) {
throw new Error(`couldn't create edge for source id: ${e.data.target}`);
}
const EdgeComponent = this.props.edgeTypes[edgeType] || this.props.edgeTypes.default;
return (
<EdgeComponent
key={`${e.data.source}-${e.data.target}`}
sourceNode={sourceNode}
targetNode={targetNode}
onClick={onElementClick}
{...e}
/>
);
}
render() {
const { width, height } = this.props;
@@ -34,7 +38,7 @@ class EdgeRenderer extends PureComponent {
return (
<Consumer>
{({ state }) => (
{({ state, onElementClick }) => (
<svg
width={width}
height={height}
@@ -43,7 +47,7 @@ class EdgeRenderer extends PureComponent {
<g
transform={`translate(${state.transform[0]},${state.transform[1]}) scale(${state.transform[2]})`}
>
{state.edges.map(e => renderEdge(e, state.nodes))}
{state.edges.map(e => this.renderEdge(e, state.nodes, onElementClick))}
</g>
</svg>
)}