/* eslint react/jsx-no-bind: "off", no-multi-comp: "off" */ import React from 'react'; import { connect } from 'react-redux'; import { List as makeList, Map as makeMap } from 'immutable'; import NodeDetailsTable from '../components/node-details/node-details-table'; import { clickNode, sortOrderChanged } from '../actions/app-actions'; import { nodesSelector } from '../selectors/chartSelectors'; import { getNodeColor } from '../utils/color-utils'; const IGNORED_COLUMNS = ['docker_container_ports', 'docker_container_id', 'docker_image_id', 'docker_container_command', 'docker_container_networks']; function getColumns(nodes) { const metricColumns = nodes .toList() .flatMap(n => { const metrics = (n.get('metrics') || makeList()) .map(m => makeMap({ id: m.get('id'), label: m.get('label'), dataType: 'number' })); return metrics; }) .toSet() .toList() .sortBy(m => m.get('label')); const metadataColumns = nodes .toList() .flatMap(n => { const metadata = (n.get('metadata') || makeList()) .map(m => makeMap({ id: m.get('id'), label: m.get('label'), dataType: m.get('dataType') })); return metadata; }) .toSet() .filter(n => !IGNORED_COLUMNS.includes(n.get('id'))) .toList() .sortBy(m => m.get('label')); const relativesColumns = nodes .toList() .flatMap(n => { const metadata = (n.get('parents') || makeList()) .map(m => makeMap({ id: m.get('topologyId'), label: m.get('topologyId') })); return metadata; }) .toSet() .toList() .sortBy(m => m.get('label')); return relativesColumns.concat(metadataColumns, metricColumns).toJS(); } function renderIdCell(props) { const iconStyle = { width: 16, flex: 'none', color: getNodeColor(props.rank, props.label_major) }; const showSubLabel = Boolean(props.pseudo); return (