SingleStatEditor.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // Libraries
  2. import React, { PureComponent } from 'react';
  3. import {
  4. PanelEditorProps,
  5. ThresholdsEditor,
  6. Threshold,
  7. PanelOptionsGrid,
  8. ValueMappingsEditor,
  9. ValueMapping,
  10. SingleStatValueOptions,
  11. SingleStatValueEditor,
  12. } from '@grafana/ui';
  13. import { SingleStatOptions, SparklineOptions } from './types';
  14. import { ColoringEditor } from './ColoringEditor';
  15. import { FontSizeEditor } from './FontSizeEditor';
  16. import { SparklineEditor } from './SparklineEditor';
  17. export class SingleStatEditor extends PureComponent<PanelEditorProps<SingleStatOptions>> {
  18. onThresholdsChanged = (thresholds: Threshold[]) =>
  19. this.props.onOptionsChange({
  20. ...this.props.options,
  21. thresholds,
  22. });
  23. onValueMappingsChanged = (valueMappings: ValueMapping[]) =>
  24. this.props.onOptionsChange({
  25. ...this.props.options,
  26. valueMappings,
  27. });
  28. onValueOptionsChanged = (valueOptions: SingleStatValueOptions) =>
  29. this.props.onOptionsChange({
  30. ...this.props.options,
  31. valueOptions,
  32. });
  33. onSparklineChanged = (sparkline: SparklineOptions) =>
  34. this.props.onOptionsChange({
  35. ...this.props.options,
  36. sparkline,
  37. });
  38. render() {
  39. const { options } = this.props;
  40. return (
  41. <>
  42. <PanelOptionsGrid>
  43. <SingleStatValueEditor onChange={this.onValueOptionsChanged} value={options.valueOptions} />
  44. <FontSizeEditor options={options} onChange={this.props.onOptionsChange} />
  45. <ColoringEditor options={options} onChange={this.props.onOptionsChange} />
  46. <SparklineEditor options={options.sparkline} onChange={this.onSparklineChanged} />
  47. <ThresholdsEditor onChange={this.onThresholdsChanged} thresholds={options.thresholds} />
  48. </PanelOptionsGrid>
  49. <ValueMappingsEditor onChange={this.onValueMappingsChanged} valueMappings={options.valueMappings} />
  50. </>
  51. );
  52. }
  53. }