SingleStatEditor.tsx 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. const current = this.props.options.fieldOptions.defaults;
  21. this.onDefaultsChange({
  22. ...current,
  23. thresholds,
  24. });
  25. };
  26. onValueMappingsChanged = (mappings: ValueMapping[]) => {
  27. const current = this.props.options.fieldOptions.defaults;
  28. this.onDefaultsChange({
  29. ...current,
  30. mappings,
  31. });
  32. };
  33. onDisplayOptionsChanged = (fieldOptions: FieldDisplayOptions) =>
  34. this.props.onOptionsChange({
  35. ...this.props.options,
  36. fieldOptions,
  37. });
  38. onSparklineChanged = (sparkline: SparklineOptions) =>
  39. this.props.onOptionsChange({
  40. ...this.props.options,
  41. sparkline,
  42. });
  43. onDefaultsChange = (field: Partial<Field>) => {
  44. this.onDisplayOptionsChanged({
  45. ...this.props.options.fieldOptions,
  46. override: field,
  47. });
  48. };
  49. render() {
  50. const { options } = this.props;
  51. const { fieldOptions } = options;
  52. const { defaults } = fieldOptions;
  53. return (
  54. <>
  55. <PanelOptionsGrid>
  56. <PanelOptionsGroup title="Display">
  57. <FieldDisplayEditor onChange={this.onDisplayOptionsChanged} value={fieldOptions} />
  58. </PanelOptionsGroup>
  59. <PanelOptionsGroup title="Field (default)">
  60. <FieldPropertiesEditor showMinMax={true} onChange={this.onDefaultsChange} value={defaults} />
  61. </PanelOptionsGroup>
  62. <FontSizeEditor options={options} onChange={this.props.onOptionsChange} />
  63. <ColoringEditor options={options} onChange={this.props.onOptionsChange} />
  64. <SparklineEditor options={options.sparkline} onChange={this.onSparklineChanged} />
  65. <ThresholdsEditor onChange={this.onThresholdsChanged} thresholds={defaults.thresholds} />
  66. </PanelOptionsGrid>
  67. <ValueMappingsEditor onChange={this.onValueMappingsChanged} valueMappings={defaults.mappings} />
  68. </>
  69. );
  70. }
  71. }