From 0ca6910f55f49d956ebbb2e4ca354ff2f15b7e73 Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Mon, 29 Nov 2021 10:19:20 -0500 Subject: [PATCH] ValueMappings: Fixes issue with regex value mapping that only sets color (#42311) (#42457) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ValueMappings: Fixes issue with regex value mapping that only sets color * Fixed test name (cherry picked from commit c3d0d37bd714110235cf85a6d24ec50e7db3e467) Co-authored-by: Torkel Ödegaard --- packages/grafana-data/src/utils/valueMappings.test.ts | 11 +++++++++++ packages/grafana-data/src/utils/valueMappings.ts | 10 +++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/grafana-data/src/utils/valueMappings.test.ts b/packages/grafana-data/src/utils/valueMappings.test.ts index d6bddbf1304..4a2dcd63299 100644 --- a/packages/grafana-data/src/utils/valueMappings.test.ts +++ b/packages/grafana-data/src/utils/valueMappings.test.ts @@ -67,6 +67,13 @@ const testSet2: ValueMapping[] = [ result: { text: 'Hostname $1' }, }, }, + { + type: MappingType.RegexToText, + options: { + pattern: '/hello/', + result: { color: 'red' }, + }, + }, ]; describe('Format value with value mappings', () => { @@ -164,6 +171,10 @@ describe('Format value with regex mappings', () => { const value = 'www.baz.com'; expect(getValueMappingResult(testSet2, value)).toBeNull(); }); + + it('should not replace match when replace text is null', () => { + expect(getValueMappingResult(testSet2, 'hello my name is')).toEqual({ color: 'red' }); + }); }); describe('isNumeric', () => { diff --git a/packages/grafana-data/src/utils/valueMappings.ts b/packages/grafana-data/src/utils/valueMappings.ts index e6828ba12a2..e774d058016 100644 --- a/packages/grafana-data/src/utils/valueMappings.ts +++ b/packages/grafana-data/src/utils/valueMappings.ts @@ -58,9 +58,13 @@ export function getValueMappingResult(valueMappings: ValueMapping[], value: any) const regex = stringToJsRegex(vm.options.pattern); if (value.match(regex)) { - const thisResult = Object.create(vm.options.result); - thisResult.text = value.replace(regex, vm.options.result.text || ''); - return thisResult; + const res = { ...vm.options.result }; + + if (res.text != null) { + res.text = value.replace(regex, vm.options.result.text || ''); + } + + return res; } case MappingType.SpecialValue: