SingleStatEditor.tsx 2.3 KB

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