PieChart: Add color changing options to pie chart (#31588)

* Allow changing of series color for PieChart

* Use useTheme hook

* Remove duplicate import
This commit is contained in:
Oscar Kilhed
2021-03-02 13:18:03 +01:00
committed by GitHub
parent 6a07a0fe93
commit b36314d03f
3 changed files with 56 additions and 29 deletions

View File

@@ -1,33 +1,46 @@
import React, { PureComponent } from 'react';
import { config } from 'app/core/config';
import { PieChart } from '@grafana/ui';
import React, { useCallback } from 'react';
import { PieChart, useTheme } from '@grafana/ui';
import { PieChartOptions } from './types';
import { getFieldDisplayValues, PanelProps } from '@grafana/data';
import { changeSeriesColorConfigFactory } from '../timeseries/overrides/colorSeriesConfigFactory';
interface Props extends PanelProps<PieChartOptions> {}
export class PieChartPanel extends PureComponent<Props> {
render() {
const { width, height, options, data, replaceVariables, fieldConfig, timeZone } = this.props;
export const PieChartPanel: React.FC<Props> = ({
width,
height,
options,
data,
onFieldConfigChange,
replaceVariables,
fieldConfig,
timeZone,
}) => {
const onSeriesColorChange = useCallback(
(label: string, color: string) => {
onFieldConfigChange(changeSeriesColorConfigFactory(label, color, fieldConfig));
},
[fieldConfig, onFieldConfigChange]
);
const values = getFieldDisplayValues({
fieldConfig,
reduceOptions: options.reduceOptions,
data: data.series,
theme: config.theme,
replaceVariables: replaceVariables,
timeZone,
}).map((v) => v.display);
const values = getFieldDisplayValues({
fieldConfig,
reduceOptions: options.reduceOptions,
data: data.series,
theme: useTheme(),
replaceVariables: replaceVariables,
timeZone,
}).map((v) => v.display);
return (
<PieChart
width={width}
height={height}
values={values}
pieType={options.pieType}
displayLabels={options.displayLabels}
legendOptions={options.legend}
/>
);
}
}
return (
<PieChart
width={width}
height={height}
values={values}
onSeriesColorChange={onSeriesColorChange}
pieType={options.pieType}
displayLabels={options.displayLabels}
legendOptions={options.legend}
/>
);
};