Fix: State timeline panel tooltip error when data is not in sync (#39438)

* Fix: State timeline panel tooltip error when data is not in sync

* Move check from tooltip to panel
This commit is contained in:
Zoltán Bedi 2021-09-27 09:46:30 +02:00 committed by GitHub
parent 57b20335e6
commit 24475cfdda
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 1 deletions

View File

@ -37,14 +37,25 @@ export const StateTimelinePanel: React.FC<TimelinePanelProps> = ({
const renderCustomTooltip = useCallback(
(alignedData: DataFrame, seriesIdx: number | null, datapointIdx: number | null) => {
const data = frames ?? [];
// Not caring about multi mode in StateTimeline
if (seriesIdx === null || datapointIdx === null) {
return null;
}
/**
* There could be a case when the tooltip shows a data from one of a multiple query and the other query finishes first
* from refreshing. This causes data to be out of sync. alignedData - 1 because Time field doesn't count.
* Render nothing in this case to prevent error.
* See https://github.com/grafana/support-escalations/issues/932
*/
if (alignedData.fields.length - 1 !== data.length || !alignedData.fields[seriesIdx]) {
return null;
}
return (
<StateTimelineTooltip
data={frames ?? []}
data={data}
alignedData={alignedData}
seriesIdx={seriesIdx}
datapointIdx={datapointIdx}

View File

@ -32,6 +32,7 @@ export const StateTimelineTooltip: React.FC<StateTimelineTooltipProps> = ({
const xFieldFmt = xField.display || getDisplayProcessor({ field: xField, timeZone, theme });
const field = alignedData.fields[seriesIdx!];
const dataFrameFieldIndex = field.state?.origin;
const fieldFmt = field.display || getDisplayProcessor({ field, timeZone, theme });
const value = field.values.get(datapointIdx!);