From 7b835f980c626771ca66a65c80a4ed0f39db476c Mon Sep 17 00:00:00 2001 From: Wylie Conlon Date: Tue, 23 Feb 2021 12:42:56 -0500 Subject: [PATCH] [TSVB] Stop inserting zeroes for null series (#90861) (#92432) * [TSVB] Stop inserting zeroes for null series * Replace empty default value with hyphen * Stop treating 0 as false * Fix test cases Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../vis_type_timeseries/common/get_last_value.js | 8 ++++---- .../common/get_last_value.test.js | 14 +++++++++++--- .../application/visualizations/views/gauge.js | 2 +- .../application/visualizations/views/metric.js | 2 +- .../apps/dashboard/dashboard_filtering.ts | 4 ++-- 5 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/plugins/vis_type_timeseries/common/get_last_value.js b/src/plugins/vis_type_timeseries/common/get_last_value.js index 9d5ad4c264c9..5a36a5e099f9 100644 --- a/src/plugins/vis_type_timeseries/common/get_last_value.js +++ b/src/plugins/vis_type_timeseries/common/get_last_value.js @@ -8,13 +8,13 @@ import { isArray, last } from 'lodash'; -const DEFAULT_VALUE = 0; -const extractValue = (data) => (data && data[1]) || null; +const DEFAULT_VALUE = '-'; +const extractValue = (data) => (data && data[1]) ?? null; export const getLastValue = (data, defaultValue = DEFAULT_VALUE) => { if (!isArray(data)) { - return data || defaultValue; + return data ?? defaultValue; } - return extractValue(last(data)) || defaultValue; + return extractValue(last(data)) ?? defaultValue; }; diff --git a/src/plugins/vis_type_timeseries/common/get_last_value.test.js b/src/plugins/vis_type_timeseries/common/get_last_value.test.js index e4192de2392e..122f037ddf3e 100644 --- a/src/plugins/vis_type_timeseries/common/get_last_value.test.js +++ b/src/plugins/vis_type_timeseries/common/get_last_value.test.js @@ -13,12 +13,20 @@ describe('getLastValue(data)', () => { expect(getLastValue('foo')).toBe('foo'); }); + test('should returns 0 as a value when not an array', () => { + expect(getLastValue(0)).toBe(0); + }); + test('should returns the last value', () => { expect(getLastValue([[1, 2]])).toBe(2); }); + test('should return 0 as a valid value', () => { + expect(getLastValue([[0, 0]])).toBe(0); + }); + test('should returns the default value ', () => { - expect(getLastValue()).toBe(0); + expect(getLastValue()).toBe('-'); }); test('should returns 0 if second to last is not defined (default)', () => { @@ -27,10 +35,10 @@ describe('getLastValue(data)', () => { [1, null], [2, null], ]) - ).toBe(0); + ).toBe('-'); }); test('should allows to override the default value', () => { - expect(getLastValue(null, '-')).toBe('-'); + expect(getLastValue(null, 'default')).toBe('default'); }); }); diff --git a/src/plugins/vis_type_timeseries/public/application/visualizations/views/gauge.js b/src/plugins/vis_type_timeseries/public/application/visualizations/views/gauge.js index c7287f79dfdb..31ea3412972e 100644 --- a/src/plugins/vis_type_timeseries/public/application/visualizations/views/gauge.js +++ b/src/plugins/vis_type_timeseries/public/application/visualizations/views/gauge.js @@ -61,7 +61,7 @@ export class Gauge extends Component { render() { const { metric, type } = this.props; const { scale, translateX, translateY } = this.state; - const value = (metric && getLastValue(metric.data)) || 0; + const value = metric && getLastValue(metric.data); const max = (metric && getValueBy('max', metric.data)) || 1; const formatter = (metric && (metric.tickFormatter || metric.formatter)) || diff --git a/src/plugins/vis_type_timeseries/public/application/visualizations/views/metric.js b/src/plugins/vis_type_timeseries/public/application/visualizations/views/metric.js index e5b368aefa2e..17cadb94457b 100644 --- a/src/plugins/vis_type_timeseries/public/application/visualizations/views/metric.js +++ b/src/plugins/vis_type_timeseries/public/application/visualizations/views/metric.js @@ -58,7 +58,7 @@ export class Metric extends Component { const { metric, secondary } = this.props; const { scale, translateX, translateY } = this.state; const primaryFormatter = (metric && (metric.tickFormatter || metric.formatter)) || ((n) => n); - const primaryValue = primaryFormatter(getLastValue((metric && metric.data) || 0)); + const primaryValue = primaryFormatter(getLastValue(metric && metric.data)); const styles = reactcss( { default: { diff --git a/test/functional/apps/dashboard/dashboard_filtering.ts b/test/functional/apps/dashboard/dashboard_filtering.ts index 2aa24fc8b706..e995bc4e52c4 100644 --- a/test/functional/apps/dashboard/dashboard_filtering.ts +++ b/test/functional/apps/dashboard/dashboard_filtering.ts @@ -110,7 +110,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('tsvb top n is filtered', async () => { - await dashboardExpect.tsvbTopNValuesExist(['0', '0']); + await dashboardExpect.tsvbTopNValuesExist(['-', '-']); }); it('saved search is filtered', async () => { @@ -172,7 +172,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('tsvb top n is filtered', async () => { - await dashboardExpect.tsvbTopNValuesExist(['0', '0']); + await dashboardExpect.tsvbTopNValuesExist(['-', '-']); }); it('saved search is filtered', async () => {