From d92ec98ecccca698919d97403d931f04d5aa75aa Mon Sep 17 00:00:00 2001 From: Nathan Marrs Date: Tue, 14 May 2024 17:56:46 -0600 Subject: [PATCH] Transformations: Add string type check to field value in substring value matcher (#87782) --- .../matchers/valueMatchers/substringMatchers.test.ts | 10 +++++++++- .../matchers/valueMatchers/substringMatchers.ts | 6 +++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/grafana-data/src/transformations/matchers/valueMatchers/substringMatchers.test.ts b/packages/grafana-data/src/transformations/matchers/valueMatchers/substringMatchers.test.ts index aaa378a30d4..207bb44e699 100644 --- a/packages/grafana-data/src/transformations/matchers/valueMatchers/substringMatchers.test.ts +++ b/packages/grafana-data/src/transformations/matchers/valueMatchers/substringMatchers.test.ts @@ -9,7 +9,7 @@ describe('value substring to matcher', () => { fields: [ { name: 'temp', - values: ['24', null, '10', 'asd', '42', 'ASD'], + values: ['24', null, '10', 'asd', '42', 'ASD', [1, 2, 3]], }, ], }), @@ -53,6 +53,14 @@ describe('value substring to matcher', () => { expect(matcher(valueIndex, field, frame, data)).toBeFalsy(); }); + it('should be a mismatch if the option is an array / non-string and should not cause errors', () => { + const frame = data[0]; + const field = frame.fields[0]; + const valueIndex = 6; + + expect(matcher(valueIndex, field, frame, data)).toBeFalsy(); + }); + it('should not match when option value is different', () => { const frame = data[0]; const field = frame.fields[0]; diff --git a/packages/grafana-data/src/transformations/matchers/valueMatchers/substringMatchers.ts b/packages/grafana-data/src/transformations/matchers/valueMatchers/substringMatchers.ts index df31e054c72..e184e81afec 100644 --- a/packages/grafana-data/src/transformations/matchers/valueMatchers/substringMatchers.ts +++ b/packages/grafana-data/src/transformations/matchers/valueMatchers/substringMatchers.ts @@ -12,7 +12,11 @@ const isSubstringMatcher: ValueMatcherInfo = { return (valueIndex: number, field: Field) => { const value = field.values[valueIndex]; return ( - (value && options.value && value.toLowerCase().includes(options.value.toLowerCase())) || options.value === '' + (value && + options.value && + typeof value === 'string' && + value.toLowerCase().includes(options.value.toLowerCase())) || + options.value === '' ); }; },