From e123e50d27c87d4c763e5b71c0c54c5aa98a0ee0 Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Wed, 28 Oct 2020 12:54:31 +0530 Subject: [PATCH] StatPanel: Fixes BizChart error max: yyy should not be less than min zzz (#28587) (#28588) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit 0d803613d6d0e8915c9a8cb75951f647bd4c9a3c) Co-authored-by: Hugo Häggmark --- .../src/field/fieldOverrides.test.ts | 19 ++++++++++++++++-- .../grafana-data/src/field/fieldOverrides.ts | 20 +++++++++++++++---- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/packages/grafana-data/src/field/fieldOverrides.test.ts b/packages/grafana-data/src/field/fieldOverrides.test.ts index f7e26bfadbc..44084927f6f 100644 --- a/packages/grafana-data/src/field/fieldOverrides.test.ts +++ b/packages/grafana-data/src/field/fieldOverrides.test.ts @@ -11,14 +11,14 @@ import { MutableDataFrame, toDataFrame } from '../dataframe'; import { DataFrame, Field, + FieldColorModeId, FieldConfig, FieldConfigPropertyItem, FieldConfigSource, FieldType, InterpolateFunction, - ThresholdsMode, - FieldColorModeId, ScopedVars, + ThresholdsMode, } from '../types'; import { locationUtil, Registry } from '../utils'; import { mockStandardProperties } from '../utils/tests/mockStandardProperties'; @@ -87,6 +87,21 @@ describe('Global MinMax', () => { expect(minmax.min).toEqual(-20); expect(minmax.max).toEqual(1234); }); + + describe('when value is null', () => { + it('then global min max should be null', () => { + const frame = toDataFrame({ + fields: [ + { name: 'Time', type: FieldType.time, values: [1] }, + { name: 'Value', type: FieldType.number, values: [null] }, + ], + }); + const { min, max } = findNumericFieldMinMax([frame]); + + expect(min).toBeNull(); + expect(max).toBeNull(); + }); + }); }); describe('applyFieldOverrides', () => { diff --git a/packages/grafana-data/src/field/fieldOverrides.ts b/packages/grafana-data/src/field/fieldOverrides.ts index fad547fc982..f1bd357e47f 100644 --- a/packages/grafana-data/src/field/fieldOverrides.ts +++ b/packages/grafana-data/src/field/fieldOverrides.ts @@ -55,11 +55,23 @@ export function findNumericFieldMinMax(data: DataFrame[]): GlobalMinMax { for (const field of frame.fields) { if (field.type === FieldType.number) { const stats = reduceField({ field, reducers }); - if (stats[ReducerID.min] < min) { - min = stats[ReducerID.min]; + const statsMin = stats[ReducerID.min]; + const statsMax = stats[ReducerID.max]; + + if (!statsMin) { + min = statsMin; } - if (stats[ReducerID.max] > max) { - max = stats[ReducerID.max]; + + if (!statsMax) { + max = statsMax; + } + + if (statsMin && statsMin < min) { + min = statsMin; + } + + if (statsMax && statsMax > max) { + max = statsMax; } } }