PieChartPanelEditor.tsx 1.7 KB

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