@@ -9,7 +9,7 @@ import { formatTimeRange } from "@/lib/elasticsearch/util";
9
9
import NodeSelect from "@/components/NodeSelect" ;
10
10
import Anchor from "@/components/Anchor" ;
11
11
import MetricChart from "./MetricChart" ;
12
- import { useMemo } from "react" ;
12
+ import { createRef , useEffect , useMemo , useState } from "react" ;
13
13
14
14
export default ( props ) => {
15
15
@@ -79,6 +79,30 @@ export default (props) => {
79
79
return Object . values ( indices || [ ] ) ;
80
80
} , [ indices ] ) ;
81
81
82
+ const [ charts , setCharts ] = useState ( [ ] )
83
+
84
+ useEffect ( ( ) => {
85
+ setCharts ( ( ) => {
86
+ const cs = { }
87
+ metrics . forEach ( ( item ) => {
88
+ if ( item [ 1 ] ?. length > 0 ) {
89
+ item [ 1 ] . forEach ( ( metricKey ) => {
90
+ cs [ metricKey ] = createRef ( )
91
+ } )
92
+ }
93
+ } )
94
+ return cs
95
+ } )
96
+ } , [ JSON . stringify ( metrics ) ] )
97
+
98
+ const pointerUpdate = ( event ) => {
99
+ Object . keys ( charts ) . forEach ( ( key ) => {
100
+ if ( charts [ key ] . current ) {
101
+ charts [ key ] . current . dispatchExternalPointerEvent ( event ) ;
102
+ }
103
+ } ) ;
104
+ } ;
105
+
82
106
return (
83
107
< div id = "node-metric" >
84
108
{ showTop ? (
@@ -109,7 +133,7 @@ export default (props) => {
109
133
110
134
< div className = "px-box" >
111
135
< div className = "px" >
112
- { metrics . map ( ( item , i ) => {
136
+ { metrics . filter ( ( item ) => ! ! item && ! ! item [ 1 ] ) . map ( ( item ) => {
113
137
return (
114
138
< div key = { item [ 0 ] } style = { { margin : "8px 0" } } >
115
139
< MetricContainer
@@ -122,6 +146,8 @@ export default (props) => {
122
146
item [ 1 ] . map ( ( metricKey ) => (
123
147
< MetricChart
124
148
key = { metricKey }
149
+ instance = { charts [ metricKey ] }
150
+ pointerUpdate = { pointerUpdate }
125
151
timezone = { timezone }
126
152
timeRange = { timeRange }
127
153
handleTimeChange = { handleTimeChange }
0 commit comments