mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
initial stuff
This commit is contained in:
parent
8fa7a71d32
commit
6fff8e4a1c
@ -6,8 +6,8 @@ import ResetStyles from './ResetStyles';
|
|||||||
interface Props {
|
interface Props {
|
||||||
className?: string;
|
className?: string;
|
||||||
defaultValue?: any;
|
defaultValue?: any;
|
||||||
getOptionLabel: (item: any) => string;
|
getOptionLabel?: (item: any) => string;
|
||||||
getOptionValue: (item: any) => string;
|
getOptionValue?: (item: any) => string;
|
||||||
onSelected: (item: any) => {} | void;
|
onSelected: (item: any) => {} | void;
|
||||||
options: any[];
|
options: any[];
|
||||||
placeholder?: string;
|
placeholder?: string;
|
||||||
|
96
public/app/plugins/panel/gauge/ValueMappings.tsx
Normal file
96
public/app/plugins/panel/gauge/ValueMappings.tsx
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
import React, { PureComponent } from 'react';
|
||||||
|
import { Label } from 'app/core/components/Label/Label';
|
||||||
|
import SimplePicker from 'app/core/components/Picker/SimplePicker';
|
||||||
|
import { OptionModuleProps } from './module';
|
||||||
|
import { RangeMap, ValueMap } from 'app/types';
|
||||||
|
|
||||||
|
interface State {
|
||||||
|
valueMaps: ValueMap[];
|
||||||
|
rangeMaps: RangeMap[];
|
||||||
|
}
|
||||||
|
|
||||||
|
enum MappingType {
|
||||||
|
ValueToText = 1,
|
||||||
|
RangeToText = 2,
|
||||||
|
}
|
||||||
|
|
||||||
|
const mappingOptions = [
|
||||||
|
{ name: 'Value to text', value: MappingType.ValueToText },
|
||||||
|
{ name: 'Range to text', value: MappingType.RangeToText },
|
||||||
|
];
|
||||||
|
|
||||||
|
export default class ValueMappings extends PureComponent<OptionModuleProps, State> {
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
|
||||||
|
this.state = {
|
||||||
|
valueMaps: props.options.valueMaps,
|
||||||
|
rangeMaps: props.options.rangeMaps,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
onMappingTypeChange = option => this.props.onChange({ ...this.props.options, mappingType: option.value });
|
||||||
|
|
||||||
|
addValueMap = () =>
|
||||||
|
this.setState(prevState => ({
|
||||||
|
valueMaps: [...prevState.valueMaps, { op: '', value: '', text: '' }],
|
||||||
|
}));
|
||||||
|
|
||||||
|
addRangeMap = () => {
|
||||||
|
this.setState = () =>
|
||||||
|
this.setState(prevState => ({
|
||||||
|
valueMaps: [...prevState.valueMaps, { op: '', value: '', text: '', from: '', to: '' }],
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
|
||||||
|
updateGauge = () => {};
|
||||||
|
|
||||||
|
renderValueMapList() {
|
||||||
|
const { mappingType, rangeMaps, valueMaps } = this.props.options;
|
||||||
|
|
||||||
|
if (mappingType === MappingType.RangeToText) {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
{rangeMaps.length > 0
|
||||||
|
? rangeMaps.map((range, index) => {
|
||||||
|
return <div>{`${range.from}-${range.to}`}</div>;
|
||||||
|
})
|
||||||
|
: 'aint no ranges, add one?'}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
{valueMaps.length > 0
|
||||||
|
? valueMaps.map((value, index) => {
|
||||||
|
return <div>{`${value}`}</div>;
|
||||||
|
})
|
||||||
|
: 'aint no values, add one?'}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
const { mappingType } = this.props.options;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="gf-form-group">
|
||||||
|
<div className="gf-form">
|
||||||
|
<Label width={5}>Type</Label>
|
||||||
|
<SimplePicker
|
||||||
|
options={mappingOptions}
|
||||||
|
defaultValue={MappingType.ValueToText}
|
||||||
|
getOptionLabel={i => i.name}
|
||||||
|
onSelected={option => this.onMappingTypeChange(option)}
|
||||||
|
width={5}
|
||||||
|
value={mappingType}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="section gf-form-group">
|
||||||
|
<h5 className="page-heading">Set value mappings</h5>
|
||||||
|
<div className="gf-form">{this.renderValueMapList()}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,11 @@
|
|||||||
import React, { PureComponent } from 'react';
|
import React, { PureComponent } from 'react';
|
||||||
import Gauge from 'app/viz/Gauge';
|
import Gauge from 'app/viz/Gauge';
|
||||||
import { NullValueMode, PanelOptionsProps, PanelProps, Threshold } from 'app/types';
|
import { NullValueMode, PanelOptionsProps, PanelProps, RangeMap, Threshold, ValueMap } from 'app/types';
|
||||||
import { getTimeSeriesVMs } from 'app/viz/state/timeSeries';
|
import { getTimeSeriesVMs } from 'app/viz/state/timeSeries';
|
||||||
import ValueOptions from './ValueOptions';
|
import ValueOptions from './ValueOptions';
|
||||||
import GaugeOptions from './GaugeOptions';
|
import GaugeOptions from './GaugeOptions';
|
||||||
import Thresholds from './Thresholds';
|
import Thresholds from './Thresholds';
|
||||||
|
import ValueMappings from './ValueMappings';
|
||||||
|
|
||||||
export interface OptionsProps {
|
export interface OptionsProps {
|
||||||
decimals: number;
|
decimals: number;
|
||||||
@ -15,6 +16,9 @@ export interface OptionsProps {
|
|||||||
suffix: string;
|
suffix: string;
|
||||||
unit: string;
|
unit: string;
|
||||||
thresholds: Threshold[];
|
thresholds: Threshold[];
|
||||||
|
valueMaps: ValueMap[];
|
||||||
|
rangeMaps: RangeMap[];
|
||||||
|
mappingType: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface OptionModuleProps {
|
export interface OptionModuleProps {
|
||||||
@ -52,11 +56,19 @@ class Options extends PureComponent<PanelOptionsProps<OptionsProps>> {
|
|||||||
static defaultProps = defaultProps;
|
static defaultProps = defaultProps;
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
const { onChange, options } = this.props;
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<ValueOptions onChange={this.props.onChange} options={this.props.options} />
|
<div className="form-section">
|
||||||
<GaugeOptions onChange={this.props.onChange} options={this.props.options} />
|
<div className="form-section__header">Options</div>
|
||||||
<Thresholds onChange={this.props.onChange} options={this.props.options} />
|
<ValueOptions onChange={onChange} options={options} />
|
||||||
|
<GaugeOptions onChange={onChange} options={options} />
|
||||||
|
<Thresholds onChange={onChange} options={options} />
|
||||||
|
</div>
|
||||||
|
<div className="form-section">
|
||||||
|
<div className="form-section__header">Value mappings</div>
|
||||||
|
<ValueMappings onChange={onChange} options={options} />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ import {
|
|||||||
DataQueryResponse,
|
DataQueryResponse,
|
||||||
DataQueryOptions,
|
DataQueryOptions,
|
||||||
} from './series';
|
} from './series';
|
||||||
import { PanelProps, PanelOptionsProps, Threshold } from './panel';
|
import { PanelProps, PanelOptionsProps, RangeMap, Threshold, ValueMap } from './panel';
|
||||||
import { PluginDashboard, PluginMeta, Plugin, PanelPlugin, PluginsState } from './plugins';
|
import { PluginDashboard, PluginMeta, Plugin, PanelPlugin, PluginsState } from './plugins';
|
||||||
import { Organization, OrganizationState } from './organization';
|
import { Organization, OrganizationState } from './organization';
|
||||||
import {
|
import {
|
||||||
@ -92,6 +92,8 @@ export {
|
|||||||
Threshold,
|
Threshold,
|
||||||
ValidationEvents,
|
ValidationEvents,
|
||||||
ValidationRule,
|
ValidationRule,
|
||||||
|
ValueMap,
|
||||||
|
RangeMap,
|
||||||
};
|
};
|
||||||
|
|
||||||
export interface StoreState {
|
export interface StoreState {
|
||||||
|
@ -36,3 +36,17 @@ export interface Threshold {
|
|||||||
color?: string;
|
color?: string;
|
||||||
canRemove: boolean;
|
canRemove: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface BaseMap {
|
||||||
|
op: string;
|
||||||
|
text: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ValueMap extends BaseMap {
|
||||||
|
value: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RangeMap extends BaseMap {
|
||||||
|
from: string;
|
||||||
|
to: string;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user