terriajs
Version:
Geospatial data visualization platform.
77 lines (67 loc) • 2.67 kB
JSX
import React from 'react';
import createReactClass from 'create-react-class';
import PropTypes from 'prop-types';
import Icon from '../Icon.jsx';
import ObserveModelMixin from '../ObserveModelMixin';
import Styles from './parameter-editors.scss';
const BooleanParameterEditor = createReactClass({
displayName: 'BooleanParameterEditor',
mixins: [ObserveModelMixin],
propTypes: {
previewed: PropTypes.object,
parameter: PropTypes.object
},
onClick() {
this.props.parameter.value = !this.props.parameter.value;
},
renderCheckbox() {
const value = this.props.parameter.value !== undefined ? this.props.parameter.value : this.props.parameter.defaultValue;
const name = this.props.parameter.name;
const description = this.props.parameter.description;
return (
<div>
<button type='button'
className={Styles.btnRadio}
title={description}
onClick={this.onClick}>
{value && <Icon glyph={Icon.GLYPHS.checkboxOn}/>}
{!value && <Icon glyph={Icon.GLYPHS.checkboxOff}/>}
{name}
</button>
</div>
);
},
renderRadio(state) {
let name;
let description;
const value = this.props.parameter.value === state;
if (state === true) {
name = this.props.parameter.trueName || this.props.parameter.name;
description = this.props.parameter.trueDescription || this.props.parameter.description;
} else {
name = this.props.parameter.falseName || this.props.parameter.name;
description = this.props.parameter.falseDescription || this.props.parameter.description;
}
return (
<div>
<button type='button'
className={Styles.btnRadio}
title={description}
onClick={this.onClick}>
{value && <Icon glyph={Icon.GLYPHS.radioOn}/>}
{!value && <Icon glyph={Icon.GLYPHS.radioOff}/>}
{name}
</button>
</div>
);
},
render() {
return (
<div>
{!this.props.parameter.hasNamedStates && this.renderCheckbox()}
{this.props.parameter.hasNamedStates && <div>{this.renderRadio(true)}{this.renderRadio(false)}</div>}
</div>
);
}
});
module.exports = BooleanParameterEditor;