Timeseries: Utilize min/max on stacking percentage (#95581)

* Bring in defined min/max into stacking range

* simplify logic

* different approach

---------

Co-authored-by: Leon Sorokin <leeoniya@gmail.com>
This commit is contained in:
Kristina 2024-11-04 11:02:09 -06:00 committed by GitHub
parent ddf766567b
commit 68aefc73b6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 23 additions and 16 deletions

View File

@ -1,7 +1,7 @@
import uPlot, { Scale, Range } from 'uplot';
import { DecimalCount, incrRoundDn, incrRoundUp, isBooleanUnit } from '@grafana/data';
import { ScaleOrientation, ScaleDirection, ScaleDistribution } from '@grafana/schema';
import { ScaleOrientation, ScaleDirection, ScaleDistribution, StackingMode } from '@grafana/schema';
import { PlotConfigBuilder } from '../types';
@ -20,6 +20,7 @@ export interface ScaleProps {
linearThreshold?: number;
centeredZero?: boolean;
decimals?: DecimalCount;
stackingMode?: StackingMode;
}
export class UPlotScaleBuilder extends PlotConfigBuilder<ScaleProps, Scale> {
@ -41,8 +42,19 @@ export class UPlotScaleBuilder extends PlotConfigBuilder<ScaleProps, Scale> {
orientation,
centeredZero,
decimals,
stackingMode,
} = this.props;
if (stackingMode === StackingMode.Percent) {
if (hardMin == null && softMin == null) {
softMin = 0;
}
if (hardMax == null && softMax == null) {
softMax = 1;
}
}
const distr = this.props.distribution;
const distribution = !isTime

View File

@ -247,24 +247,19 @@ export const preparePlotConfigBuilder: UPlotConfigPrepFn = ({
softMin: customConfig.axisSoftMin,
softMax: customConfig.axisSoftMax,
centeredZero: customConfig.axisCenteredZero,
stackingMode: customConfig.stacking?.mode,
range:
customConfig.stacking?.mode === StackingMode.Percent
field.type === FieldType.enum
? (u: uPlot, dataMin: number, dataMax: number) => {
dataMin = dataMin < 0 ? -1 : 0;
dataMax = dataMax > 0 ? 1 : 0;
return [dataMin, dataMax];
// this is the exhaustive enum (stable)
let len = field.config.type!.enum!.text!.length;
return [-1, len];
// these are only values that are present
// return [dataMin - 1, dataMax + 1]
}
: field.type === FieldType.enum
? (u: uPlot, dataMin: number, dataMax: number) => {
// this is the exhaustive enum (stable)
let len = field.config.type!.enum!.text!.length;
return [-1, len];
// these are only values that are present
// return [dataMin - 1, dataMax + 1]
}
: undefined,
: undefined,
decimals: field.config.decimals,
},
field