PiechartPanel.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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 { panelData, width, height, options } = this.props;
  14. const { valueOptions } = options;
  15. const datapoints: PiechartDataPoint[] = [];
  16. if (panelData.timeSeries) {
  17. const vmSeries = processTimeSeries({
  18. timeSeries: panelData.timeSeries,
  19. nullValueMode: NullValueMode.Null,
  20. });
  21. vmSeries.forEach(serie => {
  22. if (serie) {
  23. datapoints.push({
  24. value: serie.stats[valueOptions.stat],
  25. // TODO: get name
  26. name: 'tmpName',
  27. // TODO: add color option
  28. color: 'tmpColor',
  29. });
  30. }
  31. });
  32. }
  33. // TODO: support table data
  34. return (
  35. <ThemeContext.Consumer>
  36. {theme => (
  37. <Piechart
  38. width={width}
  39. height={height}
  40. datapoints={datapoints}
  41. pieType={options.pieType}
  42. unit={options.unit}
  43. stat={options.stat}
  44. strokeWidth={options.strokeWidth}
  45. theme={theme}
  46. />
  47. )}
  48. </ThemeContext.Consumer>
  49. );
  50. }
  51. }