From e1af571efdd1433a837a47dc5055e338c3fa0e20 Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Thu, 3 Jun 2021 16:05:08 -0700 Subject: [PATCH] Timeseries: move join field to index zero (#35217) --- .../transformers/joinDataFrames.test.ts | 4 ++-- .../transformers/joinDataFrames.ts | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/grafana-data/src/transformations/transformers/joinDataFrames.test.ts b/packages/grafana-data/src/transformations/transformers/joinDataFrames.test.ts index 5f6a5a10018..d1612fdc839 100644 --- a/packages/grafana-data/src/transformations/transformers/joinDataFrames.test.ts +++ b/packages/grafana-data/src/transformations/transformers/joinDataFrames.test.ts @@ -180,11 +180,11 @@ describe('align frames', () => { `); }); - it('sort single frame', () => { + it('sort single frame as index zero', () => { const series1 = toDataFrame({ fields: [ - { name: 'TheTime', type: FieldType.time, values: [6000, 2000, 1500] }, { name: 'A1', type: FieldType.number, values: [1, 22, 15] }, + { name: 'TheTime', type: FieldType.time, values: [6000, 2000, 1500] }, ], }); diff --git a/packages/grafana-data/src/transformations/transformers/joinDataFrames.ts b/packages/grafana-data/src/transformations/transformers/joinDataFrames.ts index 6fb8f204618..4288f3690e4 100644 --- a/packages/grafana-data/src/transformations/transformers/joinDataFrames.ts +++ b/packages/grafana-data/src/transformations/transformers/joinDataFrames.ts @@ -78,6 +78,9 @@ export function outerJoinDataFrames(options: JoinOptions): DataFrame | undefined let frame = options.frames[0]; let frameCopy = frame; + const joinFieldMatcher = getJoinMatcher(options); + let joinIndex = frameCopy.fields.findIndex((f) => joinFieldMatcher(f, frameCopy, options.frames)); + if (options.keepOriginIndices) { frameCopy = { ...frame, @@ -95,10 +98,16 @@ export function outerJoinDataFrames(options: JoinOptions): DataFrame | undefined return copy; }), }; - } - const joinFieldMatcher = getJoinMatcher(options); - const joinIndex = frameCopy.fields.findIndex((f) => joinFieldMatcher(f, frameCopy, options.frames)); + // Make sure the join field is first + if (joinIndex > 0) { + const joinField = frameCopy.fields[joinIndex]; + const fields = frameCopy.fields.filter((f, idx) => idx !== joinIndex); + fields.unshift(joinField); + frameCopy.fields = fields; + joinIndex = 0; + } + } if (options.enforceSort) { if (joinIndex >= 0) {