SingleStatEditor.tsx 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // Libraries
  2. import React, { PureComponent } from 'react';
  3. import {
  4. PanelEditorProps,
  5. ThresholdsEditor,
  6. PanelOptionsGrid,
  7. ValueMappingsEditor,
  8. FieldDisplayOptions,
  9. FieldDisplayEditor,
  10. FieldPropertiesEditor,
  11. PanelOptionsGroup,
  12. } from '@grafana/ui';
  13. import { Threshold, ValueMapping, Field } from '@grafana/data';
  14. import { SingleStatOptions, SparklineOptions } from './types';
  15. import { ColoringEditor } from './ColoringEditor';
  16. import { FontSizeEditor } from './FontSizeEditor';
  17. import { SparklineEditor } from './SparklineEditor';
  18. export class SingleStatEditor extends PureComponent<PanelEditorProps<SingleStatOptions>> {
  19. onThresholdsChanged = (thresholds: Threshold[]) =>
  20. this.onDisplayOptionsChanged({
  21. ...this.props.options.fieldOptions,
  22. thresholds,
  23. });
  24. onValueMappingsChanged = (mappings: ValueMapping[]) =>
  25. this.onDisplayOptionsChanged({
  26. ...this.props.options.fieldOptions,
  27. mappings,
  28. });
  29. onDisplayOptionsChanged = (fieldOptions: FieldDisplayOptions) =>
  30. this.props.onOptionsChange({
  31. ...this.props.options,
  32. fieldOptions,
  33. });
  34. onSparklineChanged = (sparkline: SparklineOptions) =>
  35. this.props.onOptionsChange({
  36. ...this.props.options,
  37. sparkline,
  38. });
  39. onDefaultsChange = (field: Partial<Field>) => {
  40. this.onDisplayOptionsChanged({
  41. ...this.props.options.fieldOptions,
  42. override: field,
  43. });
  44. };
  45. render() {
  46. const { options } = this.props;
  47. const { fieldOptions } = options;
  48. return (
  49. <>
  50. <PanelOptionsGrid>
  51. <PanelOptionsGroup title="Display">
  52. <FieldDisplayEditor onChange={this.onDisplayOptionsChanged} value={fieldOptions} />
  53. </PanelOptionsGroup>
  54. <PanelOptionsGroup title="Field (default)">
  55. <FieldPropertiesEditor showMinMax={true} onChange={this.onDefaultsChange} value={fieldOptions.defaults} />
  56. </PanelOptionsGroup>
  57. <FontSizeEditor options={options} onChange={this.props.onOptionsChange} />
  58. <ColoringEditor options={options} onChange={this.props.onOptionsChange} />
  59. <SparklineEditor options={options.sparkline} onChange={this.onSparklineChanged} />
  60. <ThresholdsEditor onChange={this.onThresholdsChanged} thresholds={fieldOptions.thresholds} />
  61. </PanelOptionsGrid>
  62. <ValueMappingsEditor onChange={this.onValueMappingsChanged} valueMappings={fieldOptions.mappings} />
  63. </>
  64. );
  65. }
  66. }