Field: Fix perf regression in getUniqueFieldName() (#81323)

Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
(cherry picked from commit 0530021396)
This commit is contained in:
Leon Sorokin
2024-01-26 22:48:05 +00:00
committed by grafana-delivery-bot[bot]
parent 602fc141d7
commit 5f38e98aad
2 changed files with 6 additions and 12 deletions
@@ -1,5 +1,3 @@
import { isEqual } from 'lodash';
import { DataFrame, Field, TIME_SERIES_VALUE_FIELD_NAME, FieldType, TIME_SERIES_TIME_FIELD_NAME } from '../types';
import { formatLabels } from '../utils/labels';
@@ -167,7 +165,7 @@ export function getUniqueFieldName(field: Field, frame?: DataFrame) {
for (let i = 0; i < frame.fields.length; i++) {
const otherField = frame.fields[i];
if (isEqual(field, otherField)) {
if (field === otherField) {
foundSelf = true;
if (dupeCount > 0) {
@@ -38,9 +38,8 @@ export function getDisplayValuesAndLinks(
sortOrder?: SortOrder,
mode?: TooltipDisplayMode | null
) {
const fields = data.fields.map((f, idx) => {
return { ...f, hovered: idx === columnIndex };
});
const fields = data.fields;
const hoveredField = columnIndex != null ? fields[columnIndex] : null;
const visibleFields = fields.filter((f) => !Boolean(f.config.custom?.hideFrom?.tooltip));
const traceIDField = visibleFields.find((field) => field.name === 'traceID') || fields[0];
@@ -60,7 +59,7 @@ export function getDisplayValuesAndLinks(
const linkLookup = new Set<string>();
for (const field of orderedVisibleFields) {
if (mode === TooltipDisplayMode.Single && columnIndex != null && !field.hovered) {
if (mode === TooltipDisplayMode.Single && field !== hoveredField) {
continue;
}
@@ -77,14 +76,11 @@ export function getDisplayValuesAndLinks(
});
}
// Sanitize field by removing hovered property to fix unique display name issue
const { hovered, ...sanitizedField } = field;
displayValues.push({
name: getFieldDisplayName(sanitizedField, data),
name: getFieldDisplayName(field, data),
value,
valueString: formattedValueToString(fieldDisplay),
highlight: field.hovered,
highlight: field === hoveredField,
});
}