terriajs
Version:
Geospatial data visualization platform.
59 lines (52 loc) • 1.64 kB
JSX
import createReactClass from "create-react-class";
import { runInAction } from "mobx";
import { observer } from "mobx-react";
import PropTypes from "prop-types";
import { Range } from "rc-slider";
import React from "react";
import CommonStrata from "../../../Models/Definition/CommonStrata";
import Styles from "./filter-section.scss";
const FilterSection = observer(
createReactClass({
displayName: "FilterSection",
propTypes: {
item: PropTypes.object.isRequired
},
change(filter, values) {
runInAction(() => {
filter.setTrait(CommonStrata.user, "minimumShown", values[0]);
filter.setTrait(CommonStrata.user, "maximumShown", values[1]);
});
this.props.item.terria.currentViewer.notifyRepaintRequired();
},
render() {
const item = this.props.item;
if (!item.filters || item.filters.length === 0) {
return null;
}
return (
<div className={Styles.filters}>
{item.filters.map(this.renderFilter)}
</div>
);
},
renderFilter(filter) {
const values = [filter.minimumShown, filter.maximumShown];
return (
<div key={filter.property} className={Styles.filter}>
<label htmlFor={filter.property}>
Show {filter.name}: {filter.minimumShown} to {filter.maximumShown}
</label>
<Range
value={values}
allowCross={false}
min={filter.minimumValue}
max={filter.maximumValue}
onChange={this.change.bind(this, filter)}
/>
</div>
);
}
})
);
export default FilterSection;