SingleStatEditor.tsx 2.4 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. PanelOptionsGroup,
  15. } from '@grafana/ui';
  16. import { SingleStatOptions, SparklineOptions } from './types';
  17. import { ColoringEditor } from './ColoringEditor';
  18. import { FontSizeEditor } from './FontSizeEditor';
  19. import { SparklineEditor } from './SparklineEditor';
  20. export class SingleStatEditor extends PureComponent<PanelEditorProps<SingleStatOptions>> {
  21. onThresholdsChanged = (thresholds: Threshold[]) =>
  22. this.onDisplayOptionsChanged({
  23. ...this.props.options.fieldOptions,
  24. thresholds,
  25. });
  26. onValueMappingsChanged = (mappings: ValueMapping[]) =>
  27. this.onDisplayOptionsChanged({
  28. ...this.props.options.fieldOptions,
  29. mappings,
  30. });
  31. onDisplayOptionsChanged = (fieldOptions: FieldDisplayOptions) =>
  32. this.props.onOptionsChange({
  33. ...this.props.options,
  34. fieldOptions,
  35. });
  36. onSparklineChanged = (sparkline: SparklineOptions) =>
  37. this.props.onOptionsChange({
  38. ...this.props.options,
  39. sparkline,
  40. });
  41. onDefaultsChange = (field: Partial<Field>) => {
  42. this.onDisplayOptionsChanged({
  43. ...this.props.options.fieldOptions,
  44. override: field,
  45. });
  46. };
  47. render() {
  48. const { options } = this.props;
  49. const { fieldOptions } = options;
  50. return (
  51. <>
  52. <PanelOptionsGrid>
  53. <PanelOptionsGroup title="Display">
  54. <FieldDisplayEditor onChange={this.onDisplayOptionsChanged} value={fieldOptions} />
  55. </PanelOptionsGroup>
  56. <PanelOptionsGroup title="Field (default)">
  57. <FieldPropertiesEditor showMinMax={true} onChange={this.onDefaultsChange} value={fieldOptions.defaults} />
  58. </PanelOptionsGroup>
  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. }