mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
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:
parent
ddf766567b
commit
68aefc73b6
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user