|
|
@@ -1,94 +1,55 @@
|
|
|
import React, { PureComponent } from 'react';
|
|
|
-import { Label } from 'app/core/components/Label/Label';
|
|
|
-import SimplePicker from 'app/core/components/Picker/SimplePicker';
|
|
|
+import MappingRow from './MappingRow';
|
|
|
import { OptionModuleProps } from './module';
|
|
|
import { RangeMap, ValueMap } from 'app/types';
|
|
|
|
|
|
interface State {
|
|
|
+ combinedMappings: any[];
|
|
|
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,
|
|
|
+ combinedMappings: props.options.valueMaps.concat(props.options.rangeMaps),
|
|
|
rangeMaps: props.options.rangeMaps,
|
|
|
+ valueMaps: props.options.valueMaps,
|
|
|
};
|
|
|
}
|
|
|
- onMappingTypeChange = option => this.props.onChange({ ...this.props.options, mappingType: option.value });
|
|
|
|
|
|
- addValueMap = () =>
|
|
|
+ addMapping = () =>
|
|
|
this.setState(prevState => ({
|
|
|
- valueMaps: [...prevState.valueMaps, { op: '', value: '', text: '' }],
|
|
|
+ combinedMappings: [...prevState.combinedMappings, { 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>
|
|
|
- );
|
|
|
- }
|
|
|
+ updateGauge = mapping => {
|
|
|
+ this.setState(prevState => ({
|
|
|
+ combinedMappings: prevState.combinedMappings.map(m => {
|
|
|
+ if (m === mapping) {
|
|
|
+ return { ...mapping };
|
|
|
+ }
|
|
|
|
|
|
- return (
|
|
|
- <div>
|
|
|
- {valueMaps.length > 0
|
|
|
- ? valueMaps.map((value, index) => {
|
|
|
- return <div>{`${value}`}</div>;
|
|
|
- })
|
|
|
- : 'aint no values, add one?'}
|
|
|
- </div>
|
|
|
- );
|
|
|
- }
|
|
|
+ return m;
|
|
|
+ }),
|
|
|
+ }));
|
|
|
+ };
|
|
|
|
|
|
render() {
|
|
|
- const { mappingType } = this.props.options;
|
|
|
+ const { combinedMappings } = this.state;
|
|
|
|
|
|
return (
|
|
|
- <div className="gf-form-group">
|
|
|
+ <div className="section 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 className="mappings">
|
|
|
+ {combinedMappings.length > 0 &&
|
|
|
+ combinedMappings.map((mapping, index) => {
|
|
|
+ return <MappingRow key={index} mapping={mapping} updateMapping={this.updateGauge} />;
|
|
|
+ })}
|
|
|
+ </div>
|
|
|
+ <div onClick={this.addMapping}>Add mapping</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
);
|