mirror of
https://github.com/grafana/grafana.git
synced 2025-08-01 18:08:55 +08:00
83 lines
2.2 KiB
TypeScript
83 lines
2.2 KiB
TypeScript
import { FieldMatcherID, PanelTypeChangedHandler, ReducerID } from '@grafana/data';
|
|
import { AxisPlacement } from '@grafana/ui';
|
|
|
|
/*
|
|
* This is called when the panel changes from another panel
|
|
*/
|
|
export const changeToBarChartPanelMigrationHandler: PanelTypeChangedHandler = (panel, prevPluginId, prevOptions) => {
|
|
if (prevPluginId === 'graph') {
|
|
const graphOptions: GraphOptions = prevOptions.angular;
|
|
|
|
const fieldConfig = panel.fieldConfig ?? { defaults: {}, overrides: [] };
|
|
|
|
if (graphOptions.xaxis?.mode === 'series') {
|
|
const transformations = panel.transformations || [];
|
|
transformations.push(
|
|
{
|
|
id: 'reduce',
|
|
options: {
|
|
reducers: getReducer(graphOptions.xaxis?.values),
|
|
},
|
|
},
|
|
{
|
|
id: 'transpose',
|
|
options: {},
|
|
}
|
|
);
|
|
|
|
panel.transformations = transformations;
|
|
|
|
// temporary, until we have a bar chart with per bar labels
|
|
fieldConfig.overrides.push({
|
|
matcher: {
|
|
id: FieldMatcherID.byName,
|
|
options: 'Field',
|
|
},
|
|
properties: [
|
|
{
|
|
id: 'custom.axisPlacement',
|
|
value: AxisPlacement.Hidden,
|
|
},
|
|
],
|
|
});
|
|
|
|
panel.fieldConfig = fieldConfig;
|
|
panel.options = {
|
|
...panel.options,
|
|
groupWidth: 1,
|
|
};
|
|
}
|
|
}
|
|
|
|
return {};
|
|
};
|
|
|
|
// same as grafana-ui/src/components/SingleStatShared/SingleStatBaseOptions.ts
|
|
const getReducer = (reducers: string[] | undefined) => {
|
|
const transformReducers: string[] = [];
|
|
|
|
reducers?.forEach((reducer) => {
|
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
if (!Object.values(ReducerID).includes(reducer as ReducerID)) {
|
|
if (reducer === 'current') {
|
|
transformReducers.push(ReducerID.lastNotNull);
|
|
} else if (reducer === 'total') {
|
|
transformReducers.push(ReducerID.sum);
|
|
} else if (reducer === 'avg') {
|
|
transformReducers.push(ReducerID.mean);
|
|
}
|
|
} else {
|
|
transformReducers.push(reducer);
|
|
}
|
|
});
|
|
|
|
return reducers ? transformReducers : [ReducerID.sum];
|
|
};
|
|
|
|
interface GraphOptions {
|
|
xaxis: {
|
|
mode: 'series' | 'time' | 'histogram';
|
|
values?: string[];
|
|
};
|
|
}
|