[v11.2.x] Timeseries: Utilize min/max on stacking percentage (#95792)
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>
(cherry picked from commit 68aefc73b6)
Co-authored-by: Kristina <kristina.durivage@grafana.com>
This commit is contained in:
co-authored by
Kristina
parent
2ac79897ee
commit
270004097c
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user