[v11.1.x] Transformations: Keep original field.labels.name when joining frames (#89012)

Transformations: Keep original `field.labels.name` when joining frames (#88873)

(cherry picked from commit 89a0bec208)

Co-authored-by: Leon Sorokin <leeoniya@gmail.com>
This commit is contained in:
grafana-delivery-bot[bot]
2024-06-11 10:19:59 +02:00
committed by GitHub
co-authored by Leon Sorokin
parent 52fe19249e
commit e20392c206
2 changed files with 35 additions and 2 deletions
@@ -477,6 +477,38 @@ describe('align frames', () => {
`);
});
it('add frame.name as field.labels.name only when field.labels.name does not exist', () => {
const series1 = toDataFrame({
name: 'Frame A',
fields: [
{ name: 'Time', type: FieldType.time, values: [1000, 2000] },
{ name: 'Metric 1', type: FieldType.number, values: [1, 100], labels: { name: 'bar' } },
],
});
const series2 = toDataFrame({
name: 'Frame B',
fields: [
{ name: 'Time', type: FieldType.time, values: [1000] },
{ name: 'Metric 2', type: FieldType.number, values: [150] },
],
});
const series3 = toDataFrame({
name: 'Frame C',
fields: [
{ name: 'Time', type: FieldType.time, values: [1000] },
{ name: 'Value', type: FieldType.number, values: [150] }, // weird that in this "Value" case it doesnt get moved into field.labels.name
],
});
const out = joinDataFrames({ frames: [series1, series2, series3] })!;
expect(out.fields[1].labels).toEqual({ name: 'bar' });
expect(out.fields[2].labels).toEqual({ name: 'Frame B' });
expect(out.fields[3].labels).toEqual({});
});
it('supports duplicate times', () => {
//----------
// NOTE!!!
@@ -203,7 +203,8 @@ export function joinDataFrames(options: JoinOptions): DataFrame | undefined {
if (frame.name) {
if (field.name === TIME_SERIES_VALUE_FIELD_NAME) {
name = frame.name;
} else {
} else if (labels.name == null) {
// add the name label from frame
labels = { ...labels, name: frame.name };
}
}
@@ -211,7 +212,7 @@ export function joinDataFrames(options: JoinOptions): DataFrame | undefined {
fields.push({
...field,
name,
labels, // add the name label from frame
labels,
});
}