From 10f226c4c2e4da25a96c885a1dc936d60fe0ef19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Wed, 11 Nov 2020 07:43:56 +0100 Subject: [PATCH] StatPanels: Fixes auto min max when latest value is zero (#28982) --- .../src/field/fieldOverrides.test.ts | 26 +++++++++++++++++-- .../grafana-data/src/field/fieldOverrides.ts | 20 +++++++------- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/packages/grafana-data/src/field/fieldOverrides.test.ts b/packages/grafana-data/src/field/fieldOverrides.test.ts index 44084927f6f..2cafeda0692 100644 --- a/packages/grafana-data/src/field/fieldOverrides.test.ts +++ b/packages/grafana-data/src/field/fieldOverrides.test.ts @@ -98,8 +98,30 @@ describe('Global MinMax', () => { }); const { min, max } = findNumericFieldMinMax([frame]); - expect(min).toBeNull(); - expect(max).toBeNull(); + expect(min).toBe(Number.MIN_VALUE); + expect(max).toBe(Number.MAX_VALUE); + }); + }); + + describe('when value values are zeo', () => { + it('then global min max should be correct', () => { + const frame = toDataFrame({ + fields: [ + { name: 'Time', type: FieldType.time, values: [1, 2] }, + { name: 'Value', type: FieldType.number, values: [1, 2] }, + ], + }); + const frame2 = toDataFrame({ + fields: [ + { name: 'Time', type: FieldType.time, values: [1, 2] }, + { name: 'Value', type: FieldType.number, values: [0, 0] }, + ], + }); + + const { min, max } = findNumericFieldMinMax([frame, frame2]); + + expect(min).toBe(0); + expect(max).toBe(2); }); }); }); diff --git a/packages/grafana-data/src/field/fieldOverrides.ts b/packages/grafana-data/src/field/fieldOverrides.ts index fba14e335b2..dd00c243e43 100644 --- a/packages/grafana-data/src/field/fieldOverrides.ts +++ b/packages/grafana-data/src/field/fieldOverrides.ts @@ -58,25 +58,25 @@ export function findNumericFieldMinMax(data: DataFrame[]): GlobalMinMax { const statsMin = stats[ReducerID.min]; const statsMax = stats[ReducerID.max]; - if (!statsMin) { + if (statsMin !== undefined && statsMin !== null && statsMin < min) { min = statsMin; } - if (!statsMax) { - max = statsMax; - } - - if (statsMin && statsMin < min) { - min = statsMin; - } - - if (statsMax && statsMax > max) { + if (statsMax !== undefined && statsMax !== null && statsMax > max) { max = statsMax; } } } } + if (min === Number.MAX_VALUE) { + min = Number.MIN_VALUE; + } + + if (max === Number.MIN_VALUE) { + max = Number.MAX_VALUE; + } + return { min, max }; }