node-container.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import React from 'react';
  2. import { connect } from 'react-redux';
  3. import { List as makeList } from 'immutable';
  4. import { GraphNode } from 'weaveworks-ui-components';
  5. import {
  6. getMetricValue,
  7. getMetricColor,
  8. } from '../utils/metric-utils';
  9. import { clickNode } from '../actions/request-actions';
  10. import { enterNode, leaveNode } from '../actions/app-actions';
  11. import { trackAnalyticsEvent } from '../utils/tracking-utils';
  12. import { getNodeColor,getStatusColor,setNodeColor } from '../utils/color-utils';
  13. import MatchedResults from '../components/matched-results';
  14. import { GRAPH_VIEW_MODE } from '../constants/naming';
  15. import NodeNetworksOverlay from './node-networks-overlay';
  16. class NodeContainer extends React.Component {
  17. saveRef = (ref) => {
  18. this.ref = ref;
  19. };
  20. handleMouseClick = (nodeId, ev) => {
  21. console.log(1000,'node-container.js=======handleMouseClick')
  22. ev.stopPropagation();
  23. trackAnalyticsEvent('scope.node.click', {
  24. layout: GRAPH_VIEW_MODE,
  25. parentTopologyId: this.props.currentTopology.get('parentId'),
  26. topologyId: this.props.currentTopology.get('id'),
  27. shape: this.props.shape
  28. });
  29. this.props.clickNode(nodeId, this.props.label, this.props.shape, this.ref.getBoundingClientRect());
  30. };
  31. renderPrependedInfo = () => {
  32. const { showingNetworks, networks } = this.props;
  33. if (!showingNetworks) return null;
  34. return (
  35. <NodeNetworksOverlay networks={networks} />
  36. );
  37. };
  38. renderAppendedInfo = () => {
  39. const matchedMetadata = this.props.matches.get('metadata', makeList());
  40. const matchedParents = this.props.matches.get('parents', makeList());
  41. const matchedDetails = matchedMetadata.concat(matchedParents);
  42. return (
  43. <MatchedResults matches={matchedDetails} searchTerms={this.props.searchTerms} />
  44. );
  45. };
  46. render() {
  47. const {
  48. rank, label, pseudo, metric, showingNetworks, networks,color
  49. } = this.props;
  50. const { hasMetric, height, formattedValue } = getMetricValue(metric);
  51. const metricFormattedValue = !pseudo && hasMetric ? formattedValue : '';
  52. const labelOffset = (showingNetworks && networks) ? 10 : 0;
  53. return (
  54. <GraphNode
  55. id={this.props.id}
  56. shape={this.props.shape}
  57. tag={this.props.tag}
  58. label={this.props.label}
  59. labelMinor={this.props.labelMinor}
  60. labelOffset={labelOffset}
  61. stacked={this.props.stacked}
  62. highlighted={this.props.highlighted}
  63. // color={getNodeColor(rank, label, pseudo)}
  64. color={setNodeColor(color)}
  65. size={this.props.size}
  66. isAnimated={this.props.isAnimated}
  67. contrastMode={this.props.contrastMode}
  68. forceSvg={this.props.exportingGraph}
  69. searchTerms={this.props.searchTerms}
  70. metricColor={getMetricColor(metric)}
  71. metricFormattedValue={metricFormattedValue}
  72. metricNumericValue={height}
  73. renderPrependedInfo={this.renderPrependedInfo}
  74. renderAppendedInfo={this.renderAppendedInfo}
  75. onMouseEnter={this.props.enterNode}
  76. onMouseLeave={this.props.leaveNode}
  77. onClick={this.handleMouseClick}
  78. graphNodeRef={this.saveRef}
  79. x={this.props.x}
  80. y={this.props.y}
  81. />
  82. );
  83. }
  84. }
  85. function mapStateToProps(state) {
  86. return {
  87. contrastMode: state.get('contrastMode'),
  88. currentTopology: state.get('currentTopology'),
  89. exportingGraph: state.get('exportingGraph'),
  90. searchTerms: [state.get('searchQuery')],
  91. showingNetworks: state.get('showingNetworks'),
  92. };
  93. }
  94. export default connect(
  95. mapStateToProps,
  96. { clickNode, enterNode, leaveNode }
  97. )(NodeContainer);