PieChartPanel.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // Libraries
  2. import React, { PureComponent } from 'react';
  3. // Services & Utils
  4. import { processTimeSeries, ThemeContext } from '@grafana/ui';
  5. // Components
  6. import { PieChart, PieChartDataPoint } from '@grafana/ui';
  7. // Types
  8. import { PieChartOptions } from './types';
  9. import { PanelProps, NullValueMode } from '@grafana/ui/src/types';
  10. interface Props extends PanelProps<PieChartOptions> {}
  11. export class PieChartPanel extends PureComponent<Props> {
  12. render() {
  13. const { data, width, height, options } = this.props;
  14. const { valueOptions } = options;
  15. const datapoints: PieChartDataPoint[] = [];
  16. if (data) {
  17. const vmSeries = processTimeSeries({
  18. data,
  19. nullValueMode: NullValueMode.Null,
  20. });
  21. for (let i = 0; i < vmSeries.length; i++) {
  22. const serie = vmSeries[i];
  23. if (serie) {
  24. datapoints.push({
  25. value: serie.stats[valueOptions.stat],
  26. name: serie.label,
  27. color: serie.color,
  28. });
  29. }
  30. }
  31. }
  32. // TODO: support table data
  33. return (
  34. <ThemeContext.Consumer>
  35. {theme => (
  36. <PieChart
  37. width={width}
  38. height={height}
  39. datapoints={datapoints}
  40. pieType={options.pieType}
  41. strokeWidth={options.strokeWidth}
  42. unit={valueOptions.unit}
  43. theme={theme}
  44. />
  45. )}
  46. </ThemeContext.Consumer>
  47. );
  48. }
  49. }