From c8d6168bbf4e9c71a9a9a03c3adb70750e8fb3af Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Thu, 3 Jun 2021 19:36:05 -0400 Subject: [PATCH] Timeseries: move join field to index zero (#35217) (#35219) (cherry picked from commit e1af571efdd1433a837a47dc5055e338c3fa0e20) Co-authored-by: Ryan McKinley --- .../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) {