import React from 'react'; import { connect } from 'react-redux'; import NodesChart from '../charts/nodes-chart'; import NodesGrid from '../charts/nodes-grid'; import NodesError from '../charts/nodes-error'; import { DelayedShow } from '../utils/delayed-show'; import { Loading, getNodeType } from './loading'; import { isTopologyEmpty } from '../utils/topology-utils'; import { CANVAS_MARGINS } from '../constants/styles'; const navbarHeight = 194; const marginTop = 0; /** * dynamic coords precision based on topology size */ function getLayoutPrecision(nodesCount) { let precision; if (nodesCount >= 50) { precision = 0; } else if (nodesCount > 20) { precision = 1; } else if (nodesCount > 10) { precision = 2; } else { precision = 3; } return precision; } class Nodes extends React.Component { constructor(props, context) { super(props, context); this.handleResize = this.handleResize.bind(this); this.state = { width: window.innerWidth, height: window.innerHeight - navbarHeight - marginTop, }; } componentDidMount() { window.addEventListener('resize', this.handleResize); } componentWillUnmount() { window.removeEventListener('resize', this.handleResize); } renderEmptyTopologyError(show) { return ( ); } render() { const { nodes, topologyEmpty, gridMode, topologiesLoaded, nodesLoaded, topologies, currentTopology } = this.props; const layoutPrecision = getLayoutPrecision(nodes.size); return (
{this.renderEmptyTopologyError(topologiesLoaded && nodesLoaded && topologyEmpty)} {gridMode ? : }
); } handleResize() { this.setDimensions(); } setDimensions() { const width = window.innerWidth; const height = window.innerHeight - navbarHeight - marginTop; this.setState({height, width}); } } function mapStateToProps(state) { return { currentTopology: state.get('currentTopology'), gridMode: state.get('gridMode'), nodes: state.get('nodes').filter(node => !node.get('filtered')), nodesLoaded: state.get('nodesLoaded'), topologies: state.get('topologies'), topologiesLoaded: state.get('topologiesLoaded'), topologyEmpty: isTopologyEmpty(state), }; } export default connect( mapStateToProps )(Nodes);