mirror of
https://github.com/grafana/grafana.git
synced 2025-08-06 01:49:25 +08:00

* Bar chart label positioning and sizing * Dev dashbard * Improve autosizing * Remove sync option * Unify text sizing options between stat-ish visualizations and bar chart * Add simple categorical data scenario and update dev dashboard * Remove unused options builder * Add docs annotations * Fix go lint
141 lines
3.4 KiB
TypeScript
141 lines
3.4 KiB
TypeScript
import { preparePlotConfigBuilder, preparePlotFrame } from './utils';
|
|
import {
|
|
createTheme,
|
|
DefaultTimeZone,
|
|
EventBusSrv,
|
|
FieldConfig,
|
|
FieldType,
|
|
getDefaultTimeRange,
|
|
MutableDataFrame,
|
|
VizOrientation,
|
|
} from '@grafana/data';
|
|
import { BarChartFieldConfig, BarChartOptions } from './types';
|
|
import {
|
|
BarValueVisibility,
|
|
GraphGradientMode,
|
|
LegendDisplayMode,
|
|
StackingMode,
|
|
TooltipDisplayMode,
|
|
} from '@grafana/ui';
|
|
|
|
function mockDataFrame() {
|
|
const df1 = new MutableDataFrame({
|
|
refId: 'A',
|
|
fields: [{ name: 'ts', type: FieldType.string, values: ['a', 'b', 'c'] }],
|
|
});
|
|
|
|
const df2 = new MutableDataFrame({
|
|
refId: 'B',
|
|
fields: [{ name: 'ts', type: FieldType.time, values: [1, 2, 4] }],
|
|
});
|
|
|
|
const f1Config: FieldConfig<BarChartFieldConfig> = {
|
|
displayName: 'Metric 1',
|
|
decimals: 2,
|
|
unit: 'm/s',
|
|
custom: {
|
|
gradientMode: GraphGradientMode.Opacity,
|
|
lineWidth: 2,
|
|
fillOpacity: 0.1,
|
|
},
|
|
};
|
|
|
|
const f2Config: FieldConfig<BarChartFieldConfig> = {
|
|
displayName: 'Metric 2',
|
|
decimals: 2,
|
|
unit: 'kWh',
|
|
custom: {
|
|
gradientMode: GraphGradientMode.Hue,
|
|
lineWidth: 2,
|
|
fillOpacity: 0.1,
|
|
},
|
|
};
|
|
|
|
df1.addField({
|
|
name: 'metric1',
|
|
type: FieldType.number,
|
|
config: f1Config,
|
|
state: {},
|
|
});
|
|
|
|
df2.addField({
|
|
name: 'metric2',
|
|
type: FieldType.number,
|
|
config: f2Config,
|
|
state: {},
|
|
});
|
|
|
|
return preparePlotFrame([df1, df2]);
|
|
}
|
|
|
|
jest.mock('@grafana/data', () => ({
|
|
...(jest.requireActual('@grafana/data') as any),
|
|
DefaultTimeZone: 'utc',
|
|
}));
|
|
|
|
describe('BarChart utils', () => {
|
|
describe('preparePlotConfigBuilder', () => {
|
|
const frame = mockDataFrame();
|
|
|
|
const config: BarChartOptions = {
|
|
orientation: VizOrientation.Auto,
|
|
groupWidth: 20,
|
|
barWidth: 2,
|
|
showValue: BarValueVisibility.Always,
|
|
legend: {
|
|
displayMode: LegendDisplayMode.List,
|
|
placement: 'bottom',
|
|
calcs: [],
|
|
},
|
|
stacking: StackingMode.None,
|
|
tooltip: {
|
|
mode: TooltipDisplayMode.None,
|
|
},
|
|
text: {
|
|
valueSize: 10,
|
|
},
|
|
};
|
|
|
|
it.each([VizOrientation.Auto, VizOrientation.Horizontal, VizOrientation.Vertical])('orientation', (v) => {
|
|
const result = preparePlotConfigBuilder({
|
|
...config,
|
|
orientation: v,
|
|
frame: frame!,
|
|
theme: createTheme(),
|
|
timeZone: DefaultTimeZone,
|
|
getTimeRange: getDefaultTimeRange,
|
|
eventBus: new EventBusSrv(),
|
|
}).getConfig();
|
|
expect(result).toMatchSnapshot();
|
|
});
|
|
|
|
it.each([BarValueVisibility.Always, BarValueVisibility.Auto])('value visibility', (v) => {
|
|
expect(
|
|
preparePlotConfigBuilder({
|
|
...config,
|
|
showValue: v,
|
|
frame: frame!,
|
|
theme: createTheme(),
|
|
timeZone: DefaultTimeZone,
|
|
getTimeRange: getDefaultTimeRange,
|
|
eventBus: new EventBusSrv(),
|
|
}).getConfig()
|
|
).toMatchSnapshot();
|
|
});
|
|
|
|
it.each([StackingMode.None, StackingMode.Percent, StackingMode.Normal])('stacking', (v) => {
|
|
expect(
|
|
preparePlotConfigBuilder({
|
|
...config,
|
|
stacking: v,
|
|
frame: frame!,
|
|
theme: createTheme(),
|
|
timeZone: DefaultTimeZone,
|
|
getTimeRange: getDefaultTimeRange,
|
|
eventBus: new EventBusSrv(),
|
|
}).getConfig()
|
|
).toMatchSnapshot();
|
|
});
|
|
});
|
|
});
|