import React from 'react'; import PropTypes from 'prop-types'; import { Label, Popover, OverlayTrigger } from 'react-bootstrap'; import controls from '../../stores/controls'; import TextControl from './TextControl'; import SelectControl from './SelectControl'; import ControlHeader from '../ControlHeader'; import PopoverSection from '../../../components/PopoverSection'; const controlTypes = { fixed: 'fix', metric: 'metric', }; const propTypes = { onChange: PropTypes.func, value: PropTypes.object, isFloat: PropTypes.bool, datasource: PropTypes.object, default: PropTypes.shape({ type: PropTypes.oneOf(['fix', 'metric']), value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), }), }; const defaultProps = { onChange: () => {}, default: { type: controlTypes.fixed, value: 5 }, }; export default class FixedOrMetricControl extends React.Component { constructor(props) { super(props); this.onChange = this.onChange.bind(this); this.setType = this.setType.bind(this); this.setFixedValue = this.setFixedValue.bind(this); this.setMetric = this.setMetric.bind(this); const type = (props.value ? props.value.type : props.default.type) || controlTypes.fixed; const value = (props.value ? props.value.value : props.default.value) || '100'; this.state = { type, fixedValue: type === controlTypes.fixed ? value : '', metricValue: type === controlTypes.metric ? value : null, }; } onChange() { this.props.onChange({ type: this.state.type, value: this.state.type === controlTypes.fixed ? this.state.fixedValue : this.state.metricValue, }); } setType(type) { this.setState({ type }, this.onChange); } setFixedValue(fixedValue) { this.setState({ fixedValue }, this.onChange); } setMetric(metricValue) { this.setState({ metricValue }, this.onChange); } renderPopover() { const value = this.props.value || this.props.default; const type = value.type || controlTypes.fixed; const metrics = this.props.datasource ? this.props.datasource.metrics : null; return (
{ this.onChange(controlTypes.fixed); }} > { this.setType(controlTypes.fixed); }} value={this.state.fixedValue} /> { this.onChange(controlTypes.metric); }} > { this.setType(controlTypes.metric); }} onChange={this.setMetric} value={this.state.metricValue} />
); } render() { return (
); } } FixedOrMetricControl.propTypes = propTypes; FixedOrMetricControl.defaultProps = defaultProps;