diff --git a/packages/grafana-data/src/transformations/transformers/convertFieldType.test.ts b/packages/grafana-data/src/transformations/transformers/convertFieldType.test.ts index b0e29ea9c8b..4a1c4133450 100644 --- a/packages/grafana-data/src/transformations/transformers/convertFieldType.test.ts +++ b/packages/grafana-data/src/transformations/transformers/convertFieldType.test.ts @@ -423,6 +423,35 @@ describe('field convert types transformer', () => { ]); }); + it('will support custom join separators for field type string, correctly handling undefined and null', () => { + const options = { + conversions: [{ targetField: 'mixed_values', destinationType: FieldType.string, joinWith: '&' }], + }; + + const mixedValues = toDataFrame({ + fields: [ + { + name: 'mixed_values', + type: FieldType.string, + values: [['a', 'b', 'c'], ['d', undefined, 'f'], undefined, 'regular string', null], + }, + ], + }); + + const stringified = convertFieldTypes(options, [mixedValues]); + expect( + stringified[0].fields.map(({ type, values }) => ({ + type, + values, + })) + ).toEqual([ + { + type: FieldType.string, + values: ['a&b&c', 'd&&f', undefined, '"regular string"', 'null'], + }, + ]); + }); + it('will convert time fields to strings', () => { const options = { conversions: [{ targetField: 'time', destinationType: FieldType.string, dateFormat: 'YYYY-MM' }], diff --git a/packages/grafana-data/src/transformations/transformers/convertFieldType.ts b/packages/grafana-data/src/transformations/transformers/convertFieldType.ts index 4e90e67a84c..e5fe425d7aa 100644 --- a/packages/grafana-data/src/transformations/transformers/convertFieldType.ts +++ b/packages/grafana-data/src/transformations/transformers/convertFieldType.ts @@ -218,7 +218,7 @@ export function fieldToStringField( if (joinWith?.length && Array.isArray(v)) { return v.join(joinWith); } - return field.type === FieldType.other ? JSON.stringify(v) : `${v}`; + return JSON.stringify(v); }); break;