Skip to content

Commit cc193f6

Browse files
TackAdamAdam Tackett
and
Adam Tackett
authored
[Bug fix] Trace analytics scroll bar reset (opensearch-project#1917)
* Bugfix: Remember scroll bar position on opening flyout. Signed-off-by: Adam Tackett <[email protected]> * Memorize the gnatt chart, fixes flicker Signed-off-by: Adam Tackett <[email protected]> * useCallback added to click actions Signed-off-by: Adam Tackett <[email protected]> --------- Signed-off-by: Adam Tackett <[email protected]> Co-authored-by: Adam Tackett <[email protected]>
1 parent 3da9814 commit cc193f6

File tree

1 file changed

+31
-25
lines changed

1 file changed

+31
-25
lines changed

public/components/trace_analytics/components/traces/span_detail_panel.tsx

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
} from '@elastic/eui';
1616
import debounce from 'lodash/debounce';
1717
import isEmpty from 'lodash/isEmpty';
18-
import React, { useEffect, useMemo, useState } from 'react';
18+
import React, { useCallback, useEffect, useMemo, useState } from 'react';
1919
import { HttpSetup } from '../../../../../../../src/core/public';
2020
import { Plt } from '../../../visualizations/plotly/plot';
2121
import { TraceAnalyticsMode } from '../../home';
@@ -187,15 +187,18 @@ export function SpanDetailPanel(props: {
187187

188188
const [currentSpan, setCurrentSpan] = useState('');
189189

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+
);
199202

200203
const renderFilters = useMemo(() => {
201204
return spanFilters.map(({ field, value }) => (
@@ -212,15 +215,15 @@ export function SpanDetailPanel(props: {
212215
));
213216
}, [spanFilters]);
214217

215-
const onHover = () => {
218+
const onHover = useCallback(() => {
216219
const dragLayer = document.getElementsByClassName('nsewdrag')?.[0];
217220
dragLayer.style.cursor = 'pointer';
218-
};
221+
}, []);
219222

220-
const onUnhover = () => {
223+
const onUnhover = useCallback(() => {
221224
const dragLayer = document.getElementsByClassName('nsewdrag')?.[0];
222225
dragLayer.style.cursor = '';
223-
};
226+
}, []);
224227

225228
const toggleOptions = [
226229
{
@@ -254,6 +257,19 @@ export function SpanDetailPanel(props: {
254257
[DSL, setCurrentSpan]
255258
);
256259

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+
257273
return (
258274
<>
259275
<EuiPanel data-test-subj="span-gantt-chart-panel">
@@ -280,17 +296,7 @@ export function SpanDetailPanel(props: {
280296
)}
281297
<EuiHorizontalRule margin="m" />
282298
<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}
294300
</div>
295301
</EuiPanel>
296302
{!!currentSpan && (

0 commit comments

Comments
 (0)