PieChartPanelEditor.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import React, { PureComponent } from 'react';
  2. import {
  3. PanelEditorProps,
  4. PanelOptionsGrid,
  5. ValueMappingsEditor,
  6. FieldDisplayEditor,
  7. FieldDisplayOptions,
  8. FieldPropertiesEditor,
  9. PanelOptionsGroup,
  10. } from '@grafana/ui';
  11. import { ValueMapping, FieldConfig } from '@grafana/data';
  12. import { PieChartOptionsBox } from './PieChartOptionsBox';
  13. import { PieChartOptions } from './types';
  14. export class PieChartPanelEditor extends PureComponent<PanelEditorProps<PieChartOptions>> {
  15. onValueMappingsChanged = (mappings: ValueMapping[]) => {
  16. const current = this.props.options.fieldOptions.defaults;
  17. this.onDefaultsChange({
  18. ...current,
  19. mappings,
  20. });
  21. };
  22. onDisplayOptionsChanged = (fieldOptions: FieldDisplayOptions) =>
  23. this.props.onOptionsChange({
  24. ...this.props.options,
  25. fieldOptions,
  26. });
  27. onDefaultsChange = (field: FieldConfig) => {
  28. this.onDisplayOptionsChanged({
  29. ...this.props.options.fieldOptions,
  30. defaults: field,
  31. });
  32. };
  33. render() {
  34. const { onOptionsChange, options, data } = this.props;
  35. const { fieldOptions } = options;
  36. const { defaults } = fieldOptions;
  37. return (
  38. <>
  39. <PanelOptionsGrid>
  40. <PanelOptionsGroup title="Display">
  41. <FieldDisplayEditor onChange={this.onDisplayOptionsChanged} value={fieldOptions} />
  42. </PanelOptionsGroup>
  43. <PanelOptionsGroup title="Field (default)">
  44. <FieldPropertiesEditor showMinMax={true} onChange={this.onDefaultsChange} value={defaults} />
  45. </PanelOptionsGroup>
  46. <PieChartOptionsBox data={data} onOptionsChange={onOptionsChange} options={options} />
  47. </PanelOptionsGrid>
  48. <ValueMappingsEditor onChange={this.onValueMappingsChanged} valueMappings={defaults.mappings} />
  49. </>
  50. );
  51. }
  52. }