BarChart: fix stale bar values and x axis labels (#39188)

This commit is contained in:
Leon Sorokin
2021-09-14 12:16:43 -05:00
committed by GitHub
parent 063160aae2
commit df6b6e7a98
6 changed files with 22 additions and 5 deletions

View File

@@ -1,4 +1,4 @@
import React from 'react';
import React, { useRef } from 'react';
import { cloneDeep } from 'lodash';
import { DataFrame, TimeRange } from '@grafana/data';
import { GraphNG, GraphNGProps, PlotLegend, UPlotConfigBuilder, usePanelContext, useTheme2 } from '@grafana/ui';
@@ -27,6 +27,9 @@ export const BarChart: React.FC<BarChartProps> = (props) => {
const theme = useTheme2();
const { eventBus } = usePanelContext();
const frame0Ref = useRef<DataFrame>();
frame0Ref.current = props.frames[0];
const renderLegend = (config: UPlotConfigBuilder) => {
if (!config || props.legend.displayMode === LegendDisplayMode.Hidden) {
return null;
@@ -35,6 +38,8 @@ export const BarChart: React.FC<BarChartProps> = (props) => {
return <PlotLegend data={props.frames} config={config} maxHeight="35%" maxWidth="60%" {...props.legend} />;
};
const rawValue = (seriesIdx: number, valueIdx: number) => frame0Ref.current!.fields[seriesIdx].values.get(valueIdx);
const prepConfig = (alignedFrame: DataFrame, allFrames: DataFrame[], getTimeRange: () => TimeRange) => {
const { timeZone, orientation, barWidth, showValue, groupWidth, stacking, legend, tooltip, text } = props;
@@ -52,6 +57,7 @@ export const BarChart: React.FC<BarChartProps> = (props) => {
legend,
tooltip,
text,
rawValue,
allFrames: props.frames,
});
};

View File

@@ -19,6 +19,7 @@ export interface BarChartOptions extends OptionsWithLegend, OptionsWithTooltip,
showValue: BarValueVisibility;
barWidth: number;
groupWidth: number;
rawValue: (seriesIdx: number, valueIdx: number) => number;
}
/**

View File

@@ -94,6 +94,7 @@ describe('BarChart utils', () => {
text: {
valueSize: 10,
},
rawValue: (seriesIdx: number, valueIdx: number) => frame.fields[seriesIdx].values.get(valueIdx),
};
it.each([VizOrientation.Auto, VizOrientation.Horizontal, VizOrientation.Vertical])('orientation', (v) => {

View File

@@ -45,6 +45,7 @@ export const preparePlotConfigBuilder: UPlotConfigPrepFn<BarChartOptions> = ({
barWidth,
stacking,
text,
rawValue,
}) => {
const builder = new UPlotConfigBuilder();
const defaultValueFormatter = (seriesIdx: number, value: any) =>
@@ -67,7 +68,7 @@ export const preparePlotConfigBuilder: UPlotConfigPrepFn<BarChartOptions> = ({
groupWidth,
barWidth,
stacking,
rawValue: (seriesIdx: number, valueIdx: number) => frame.fields[seriesIdx].values.get(valueIdx),
rawValue,
formatValue,
text,
showValue,