| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- // Libraries
- import React, { PureComponent } from 'react';
- import {
- ThresholdsEditor,
- ValueMappingsEditor,
- PanelOptionsGrid,
- FieldDisplayEditor,
- FieldDisplayOptions,
- FieldPropertiesEditor,
- PanelOptionsGroup,
- FormLabel,
- PanelEditorProps,
- Select,
- DataLinksEditor,
- } from '@grafana/ui';
- import { FieldConfig, DataLink } from '@grafana/data';
- import { Threshold, ValueMapping } from '@grafana/data';
- import { BarGaugeOptions, orientationOptions, displayModes } from './types';
- import {
- getDataLinksVariableSuggestions,
- getCalculationValueDataLinksVariableSuggestions,
- } from 'app/features/panel/panellinks/link_srv';
- export class BarGaugePanelEditor extends PureComponent<PanelEditorProps<BarGaugeOptions>> {
- onThresholdsChanged = (thresholds: Threshold[]) => {
- const current = this.props.options.fieldOptions.defaults;
- this.onDefaultsChange({
- ...current,
- thresholds,
- });
- };
- onValueMappingsChanged = (mappings: ValueMapping[]) => {
- const current = this.props.options.fieldOptions.defaults;
- this.onDefaultsChange({
- ...current,
- mappings,
- });
- };
- onDisplayOptionsChanged = (fieldOptions: FieldDisplayOptions) =>
- this.props.onOptionsChange({
- ...this.props.options,
- fieldOptions,
- });
- onDefaultsChange = (field: FieldConfig) => {
- this.onDisplayOptionsChanged({
- ...this.props.options.fieldOptions,
- defaults: field,
- });
- };
- onOrientationChange = ({ value }: any) => this.props.onOptionsChange({ ...this.props.options, orientation: value });
- onDisplayModeChange = ({ value }: any) => this.props.onOptionsChange({ ...this.props.options, displayMode: value });
- onDataLinksChanged = (links: DataLink[]) => {
- this.onDefaultsChange({
- ...this.props.options.fieldOptions.defaults,
- links,
- });
- };
- render() {
- const { options } = this.props;
- const { fieldOptions } = options;
- const { defaults } = fieldOptions;
- const suggestions = fieldOptions.values
- ? getDataLinksVariableSuggestions(this.props.data.series)
- : getCalculationValueDataLinksVariableSuggestions(this.props.data.series);
- const labelWidth = 6;
- return (
- <>
- <PanelOptionsGrid>
- <PanelOptionsGroup title="Display">
- <FieldDisplayEditor onChange={this.onDisplayOptionsChanged} value={fieldOptions} labelWidth={labelWidth} />
- <div className="form-field">
- <FormLabel width={labelWidth}>Orientation</FormLabel>
- <Select
- width={12}
- options={orientationOptions}
- defaultValue={orientationOptions[0]}
- onChange={this.onOrientationChange}
- value={orientationOptions.find(item => item.value === options.orientation)}
- />
- </div>
- <div className="form-field">
- <FormLabel width={labelWidth}>Mode</FormLabel>
- <Select
- width={12}
- options={displayModes}
- defaultValue={displayModes[0]}
- onChange={this.onDisplayModeChange}
- value={displayModes.find(item => item.value === options.displayMode)}
- />
- </div>
- </PanelOptionsGroup>
- <PanelOptionsGroup title="Field">
- <FieldPropertiesEditor showMinMax={true} onChange={this.onDefaultsChange} value={defaults} />
- </PanelOptionsGroup>
- <ThresholdsEditor onChange={this.onThresholdsChanged} thresholds={defaults.thresholds} />
- </PanelOptionsGrid>
- <ValueMappingsEditor onChange={this.onValueMappingsChanged} valueMappings={defaults.mappings} />
- <PanelOptionsGroup title="Data links">
- <DataLinksEditor
- value={defaults.links}
- onChange={this.onDataLinksChanged}
- suggestions={suggestions}
- maxLinks={10}
- />
- </PanelOptionsGroup>
- </>
- );
- }
- }
|