import { Component } from 'react'; import invariant from 'invariant'; import get from 'lodash/get'; import { NodeRecordMap, NodeRecord, Id, Position } from '../../customTypings/index.d'; type Props = { nodes: NodeRecordMap; nodeTypeMap: object; startMoveNodeTo: (nodeId: Id, nodePosition: string) => void; moveNodeTo: (nodeId: Id, nodePosition: Position) => void; moveNodeToEnd: (nodeId: Id, nodePosition: Position) => void; snapToGrid: boolean; }; class NodesRenderer extends Component { constructor(props: Props) { super(props); this.renderNode = this.renderNode.bind(this); } renderNode(node: NodeRecord) { const type = node.getNodeType(); const ConcreteComponent = get((this.props.nodeTypeMap as any)[type], 'component'); if (!ConcreteComponent) { invariant( false, ` the defined node type in your graph model hasn't been mapped into the dataflow configuration, check NodeType documentation`, ); } return ( ); } render() { return {this.props.nodes.toArray().map(this.renderNode)}; } } export default NodesRenderer;