GaugePanelEditor.tsx 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. Field,
  13. FieldPropertiesEditor,
  14. Switch,
  15. } from '@grafana/ui';
  16. import { GaugeOptions } from './types';
  17. export class GaugePanelEditor extends PureComponent<PanelEditorProps<GaugeOptions>> {
  18. labelWidth = 6;
  19. onToggleThresholdLabels = () =>
  20. this.props.onOptionsChange({ ...this.props.options, showThresholdLabels: !this.props.options.showThresholdLabels });
  21. onToggleThresholdMarkers = () =>
  22. this.props.onOptionsChange({
  23. ...this.props.options,
  24. showThresholdMarkers: !this.props.options.showThresholdMarkers,
  25. });
  26. onThresholdsChanged = (thresholds: Threshold[]) =>
  27. this.onDisplayOptionsChanged({
  28. ...this.props.options.fieldOptions,
  29. thresholds,
  30. });
  31. onValueMappingsChanged = (mappings: ValueMapping[]) =>
  32. this.onDisplayOptionsChanged({
  33. ...this.props.options.fieldOptions,
  34. mappings,
  35. });
  36. onDisplayOptionsChanged = (fieldOptions: FieldDisplayOptions) =>
  37. this.props.onOptionsChange({
  38. ...this.props.options,
  39. fieldOptions,
  40. });
  41. onDefaultsChange = (field: Partial<Field>) => {
  42. this.onDisplayOptionsChanged({
  43. ...this.props.options.fieldOptions,
  44. defaults: field,
  45. });
  46. };
  47. render() {
  48. const { options } = this.props;
  49. const { fieldOptions, showThresholdLabels, showThresholdMarkers } = options;
  50. return (
  51. <>
  52. <PanelOptionsGrid>
  53. <FieldDisplayEditor
  54. onChange={this.onDisplayOptionsChanged}
  55. options={fieldOptions}
  56. labelWidth={this.labelWidth}
  57. >
  58. <Switch
  59. label="Labels"
  60. labelClass={`width-${this.labelWidth}`}
  61. checked={showThresholdLabels}
  62. onChange={this.onToggleThresholdLabels}
  63. />
  64. <Switch
  65. label="Markers"
  66. labelClass={`width-${this.labelWidth}`}
  67. checked={showThresholdMarkers}
  68. onChange={this.onToggleThresholdMarkers}
  69. />
  70. </FieldDisplayEditor>
  71. <FieldPropertiesEditor
  72. title="Field"
  73. showMinMax={true}
  74. onChange={this.onDefaultsChange}
  75. options={fieldOptions.defaults}
  76. />
  77. <ThresholdsEditor onChange={this.onThresholdsChanged} thresholds={fieldOptions.thresholds} />
  78. </PanelOptionsGrid>
  79. <ValueMappingsEditor onChange={this.onValueMappingsChanged} valueMappings={fieldOptions.mappings} />
  80. </>
  81. );
  82. }
  83. }