From a5707788bad255597c9c97010fc0434ab11a7534 Mon Sep 17 00:00:00 2001 From: Tim Levett Date: Wed, 3 Apr 2024 11:11:09 -0500 Subject: [PATCH] Transformations - make substring and not substring transformer case insensitive. (#84699) * make substring and not substring transformer case insensitive * timlevett/case-insensitive/ run linter --------- Co-authored-by: jev forsberg --- .../valueMatchers/substringMatchers.test.ts | 16 +++++++++++++++- .../matchers/valueMatchers/substringMatchers.ts | 12 ++++++++++-- 2 files changed, 25 insertions(+), 3 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 f9f7789cd66..aaa378a30d4 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'], + values: ['24', null, '10', 'asd', '42', 'ASD'], }, ], }), @@ -30,6 +30,20 @@ describe('value substring to matcher', () => { expect(matcher(valueIndex, field, frame, data)).toBeTruthy(); }); + it('should match case insensitive', () => { + const frame = data[0]; + const field = frame.fields[0]; + const valueIndex = 5; + const caseInsensitiveMatcher = getValueMatcher({ + id: ValueMatcherID.substring, + options: { + value: 'asd', + }, + }); + + expect(caseInsensitiveMatcher(valueIndex, field, frame, data)).toBeTruthy(); + }); + // Added for https://github.com/grafana/grafana/pull/83548#pullrequestreview-1904931540 where the matcher was not handling null values it('should be a mismatch if the option is null and should not cause errors', () => { const frame = data[0]; diff --git a/packages/grafana-data/src/transformations/matchers/valueMatchers/substringMatchers.ts b/packages/grafana-data/src/transformations/matchers/valueMatchers/substringMatchers.ts index 07d5d8486ab..df31e054c72 100644 --- a/packages/grafana-data/src/transformations/matchers/valueMatchers/substringMatchers.ts +++ b/packages/grafana-data/src/transformations/matchers/valueMatchers/substringMatchers.ts @@ -11,7 +11,9 @@ const isSubstringMatcher: ValueMatcherInfo = { get: (options) => { return (valueIndex: number, field: Field) => { const value = field.values[valueIndex]; - return (value && value.includes(options.value)) || options.value === ''; + return ( + (value && options.value && value.toLowerCase().includes(options.value.toLowerCase())) || options.value === '' + ); }; }, getOptionsDisplayText: () => { @@ -28,7 +30,13 @@ const isNotSubstringValueMatcher: ValueMatcherInfo = { get: (options) => { return (valueIndex: number, field: Field) => { const value = field.values[valueIndex]; - return typeof value === 'string' && options.value !== '' && !value.includes(options.value); + return ( + typeof value === 'string' && + options.value && + value && + options.value !== '' && + !value.toLowerCase().includes(options.value.toLowerCase()) + ); }; }, getOptionsDisplayText: () => {