@@ -15,7 +15,7 @@ import {
15
15
} from '@elastic/eui' ;
16
16
import debounce from 'lodash/debounce' ;
17
17
import isEmpty from 'lodash/isEmpty' ;
18
- import React , { useEffect , useMemo , useState } from 'react' ;
18
+ import React , { useCallback , useEffect , useMemo , useState } from 'react' ;
19
19
import { HttpSetup } from '../../../../../../../src/core/public' ;
20
20
import { Plt } from '../../../visualizations/plotly/plot' ;
21
21
import { TraceAnalyticsMode } from '../../home' ;
@@ -187,15 +187,18 @@ export function SpanDetailPanel(props: {
187
187
188
188
const [ currentSpan , setCurrentSpan ] = useState ( '' ) ;
189
189
190
- const onClick = ( event : any ) => {
191
- if ( ! event ?. points ) return ;
192
- const point = event . points [ 0 ] ;
193
- if ( fromApp ) {
194
- props . openSpanFlyout ( point . data . spanId ) ;
195
- } else {
196
- setCurrentSpan ( point . data . spanId ) ;
197
- }
198
- } ;
190
+ const onClick = useCallback (
191
+ ( event : any ) => {
192
+ if ( ! event ?. points ) return ;
193
+ const point = event . points [ 0 ] ;
194
+ if ( fromApp ) {
195
+ props . openSpanFlyout ( point . data . spanId ) ;
196
+ } else {
197
+ setCurrentSpan ( point . data . spanId ) ;
198
+ }
199
+ } ,
200
+ [ props . openSpanFlyout , setCurrentSpan , fromApp ]
201
+ ) ;
199
202
200
203
const renderFilters = useMemo ( ( ) => {
201
204
return spanFilters . map ( ( { field, value } ) => (
@@ -212,15 +215,15 @@ export function SpanDetailPanel(props: {
212
215
) ) ;
213
216
} , [ spanFilters ] ) ;
214
217
215
- const onHover = ( ) => {
218
+ const onHover = useCallback ( ( ) => {
216
219
const dragLayer = document . getElementsByClassName ( 'nsewdrag' ) ?. [ 0 ] ;
217
220
dragLayer . style . cursor = 'pointer' ;
218
- } ;
221
+ } , [ ] ) ;
219
222
220
- const onUnhover = ( ) => {
223
+ const onUnhover = useCallback ( ( ) => {
221
224
const dragLayer = document . getElementsByClassName ( 'nsewdrag' ) ?. [ 0 ] ;
222
225
dragLayer . style . cursor = '' ;
223
- } ;
226
+ } , [ ] ) ;
224
227
225
228
const toggleOptions = [
226
229
{
@@ -254,6 +257,19 @@ export function SpanDetailPanel(props: {
254
257
[ DSL , setCurrentSpan ]
255
258
) ;
256
259
260
+ const ganttChart = useMemo (
261
+ ( ) => (
262
+ < Plt
263
+ data = { data . gantt }
264
+ layout = { layout }
265
+ onClickHandler = { onClick }
266
+ onHoverHandler = { onHover }
267
+ onUnhoverHandler = { onUnhover }
268
+ />
269
+ ) ,
270
+ [ data . gantt , layout , onClick , onHover , onUnhover ]
271
+ ) ;
272
+
257
273
return (
258
274
< >
259
275
< EuiPanel data-test-subj = "span-gantt-chart-panel" >
@@ -280,17 +296,7 @@ export function SpanDetailPanel(props: {
280
296
) }
281
297
< EuiHorizontalRule margin = "m" />
282
298
< div style = { { overflowY : 'auto' , maxHeight : 500 } } >
283
- { toggleIdSelected === 'timeline' ? (
284
- < Plt
285
- data = { data . gantt }
286
- layout = { layout }
287
- onClickHandler = { onClick }
288
- onHoverHandler = { onHover }
289
- onUnhoverHandler = { onUnhover }
290
- />
291
- ) : (
292
- spanDetailTable
293
- ) }
299
+ { toggleIdSelected === 'timeline' ? ganttChart : spanDetailTable }
294
300
</ div >
295
301
</ EuiPanel >
296
302
{ ! ! currentSpan && (
0 commit comments