From 02d19f0380e791558de9a8550f1441944643def1 Mon Sep 17 00:00:00 2001 From: Marcus Andersson Date: Tue, 8 Sep 2020 14:01:42 +0200 Subject: [PATCH] Transformations: make sure that we copy all the values from a field when using MutableDataFrame. (#27446) --- .../src/dataframe/MutableDataFrame.ts | 2 +- .../transformers/merge.test.ts | 40 +++++++++++++++++-- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/packages/grafana-data/src/dataframe/MutableDataFrame.ts b/packages/grafana-data/src/dataframe/MutableDataFrame.ts index d0e79371268..c940604d831 100644 --- a/packages/grafana-data/src/dataframe/MutableDataFrame.ts +++ b/packages/grafana-data/src/dataframe/MutableDataFrame.ts @@ -110,11 +110,11 @@ export class MutableDataFrame extends FunctionalVector implements Da } const field: MutableField = { + ...f, name, type, config: f.config || {}, values: this.creator(buffer), - labels: f.labels, }; if (type === FieldType.other) { diff --git a/packages/grafana-data/src/transformations/transformers/merge.test.ts b/packages/grafana-data/src/transformations/transformers/merge.test.ts index 5469691bc7c..84ef6937de0 100644 --- a/packages/grafana-data/src/transformations/transformers/merge.test.ts +++ b/packages/grafana-data/src/transformations/transformers/merge.test.ts @@ -1,5 +1,5 @@ import { mockTransformationsRegistry } from '../../utils/tests/mockTransformationsRegistry'; -import { DataTransformerConfig, Field, FieldType } from '../../types'; +import { DataTransformerConfig, Field, FieldType, DisplayProcessor } from '../../types'; import { DataTransformerID } from './ids'; import { toDataFrame } from '../../dataframe'; import { transformDataFrame } from '../transformDataFrame'; @@ -356,6 +356,37 @@ describe('Merge multipe to single', () => { expect(fields).toEqual(expected); }); + it('combine two time series, where first serie fields has display processor, into one', () => { + const displayProcessor: DisplayProcessor = jest.fn(); + + const serieA = toDataFrame({ + name: 'A', + fields: [ + { name: 'Time', type: FieldType.time, values: [100, 150, 200], display: displayProcessor }, + { name: 'Temp', type: FieldType.number, values: [1, 4, 5] }, + ], + }); + + const serieB = toDataFrame({ + name: 'B', + fields: [ + { name: 'Time', type: FieldType.time, values: [100, 125, 126] }, + { name: 'Temp', type: FieldType.number, values: [-1, 2, 3] }, + ], + }); + + const result = transformDataFrame([cfg], [serieA, serieB]); + const expected: Field[] = [ + createField('Time', FieldType.time, [100, 150, 200, 100, 125, 126], {}, displayProcessor), + createField('Temp', FieldType.number, [1, 4, 5, -1, 2, 3]), + ]; + + const fields = unwrap(result[0].fields); + + expect(fields[0].display).toBe(displayProcessor); + expect(fields).toEqual(expected); + }); + it('combine two time series, where first serie fields has units, into one', () => { const serieA = toDataFrame({ name: 'A', @@ -500,8 +531,8 @@ describe('Merge multipe to single', () => { }); }); -const createField = (name: string, type: FieldType, values: any[], config = {}): Field => { - return { name, type, values: new ArrayVector(values), config, labels: undefined }; +const createField = (name: string, type: FieldType, values: any[], config = {}, display?: DisplayProcessor): Field => { + return { name, type, values: new ArrayVector(values), config, labels: undefined, display }; }; const unwrap = (fields: Field[]): Field[] => { @@ -510,7 +541,8 @@ const unwrap = (fields: Field[]): Field[] => { field.name, field.type, field.values.toArray().map((value: any) => value), - field.config + field.config, + field.display ) ); };