From 8c9b6efb0547a36022933606692de72087c6e89b Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Wed, 14 Dec 2022 19:16:49 +0100 Subject: [PATCH] [v9.3.x] Transformations: Fix bug in convert fields boolean to number (#60355) Transformations: Fix bug in convert fields boolean to number (#60277) * fix bug in convert fields boolean to number * check for string outside of loop (cherry picked from commit 286af5a53bf832a1dd7cb891723f85067e373c50) Co-authored-by: Brendan O'Handley --- .../transformers/convertFieldType.test.ts | 20 +++++++++++++++++++ .../transformers/convertFieldType.ts | 15 +++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/packages/grafana-data/src/transformations/transformers/convertFieldType.test.ts b/packages/grafana-data/src/transformations/transformers/convertFieldType.test.ts index 7e6e1fd5aaa..d8e70c81138 100644 --- a/packages/grafana-data/src/transformations/transformers/convertFieldType.test.ts +++ b/packages/grafana-data/src/transformations/transformers/convertFieldType.test.ts @@ -121,6 +121,26 @@ it('can convert strings with commas to numbers', () => { }); }); +it('converts booleans to numbers', () => { + const options = { targetField: 'booleans', destinationType: FieldType.number }; + + const stringyNumbers = { + name: 'booleans', + type: FieldType.boolean, + values: new ArrayVector([true, false]), + config: {}, + }; + + const numbers = convertFieldType(stringyNumbers, options); + + expect(numbers).toEqual({ + name: 'booleans', + type: FieldType.number, + values: new ArrayVector([1, 0]), + config: {}, + }); +}); + describe('field convert types transformer', () => { beforeAll(() => { mockTransformationsRegistry([convertFieldTypeTransformer]); diff --git a/packages/grafana-data/src/transformations/transformers/convertFieldType.ts b/packages/grafana-data/src/transformations/transformers/convertFieldType.ts index 318f1a3f4eb..92129534e5b 100644 --- a/packages/grafana-data/src/transformations/transformers/convertFieldType.ts +++ b/packages/grafana-data/src/transformations/transformers/convertFieldType.ts @@ -141,10 +141,19 @@ export function fieldToTimeField(field: Field, dateFormat?: string): Field { function fieldToNumberField(field: Field): Field { const numValues = field.values.toArray().slice(); + const valuesAsStrings = numValues.some((v) => typeof v === 'string'); + for (let n = 0; n < numValues.length; n++) { - // some numbers returned from datasources have commas - // strip the commas, coerce the string to a number - const number = +numValues[n].replace(/,/g, ''); + let toBeConverted = numValues[n]; + + if (valuesAsStrings) { + // some numbers returned from datasources have commas + // strip the commas, coerce the string to a number + toBeConverted = toBeConverted.replace(/,/g, ''); + } + + const number = +toBeConverted; + numValues[n] = Number.isFinite(number) ? number : null; }