UNPKG

terriajs

Version:

Geospatial data visualization platform.

159 lines (149 loc) 4.8 kB
"use strict"; import React from "react"; import PropTypes from "prop-types"; import defined from "terriajs-cesium/Source/Core/defined"; import Styles from "./parameter-editors.scss"; import { selectOnMap as selectPointOnMap, getDisplayValue as getPointParameterDisplayValue } from "./PointParameterEditor"; import { selectOnMap as selectPolygonOnMap, getDisplayValue as getPolygonParameterDisplayValue } from "./PolygonParameterEditor"; import { selectOnMap as selectExistingPolygonOnMap, getDisplayValue as getExistingPolygonParameterDisplayValue } from "./SelectAPolygonParameterEditor"; import { getDisplayValue as getRegionPickerDisplayValue } from "./RegionPicker"; import createReactClass from "create-react-class"; import GeoJsonParameter from "../../Models/FunctionParameters/GeoJsonParameter"; import { withTranslation } from "react-i18next"; import { observer } from "mobx-react"; import { runInAction } from "mobx"; import CommonStrata from "../../Models/Definition/CommonStrata"; const GeoJsonParameterEditor = observer( createReactClass({ displayName: "GeoJsonParameterEditor", propTypes: { previewed: PropTypes.object, parameter: PropTypes.object, viewState: PropTypes.object, t: PropTypes.func.isRequired }, onCleanUp() { this.props.viewState.openAddData(); }, selectPointOnMap() { runInAction(() => { this.props.parameter.setValue(CommonStrata.user, undefined); selectPointOnMap( this.props.previewed.terria, this.props.viewState, this.props.parameter, this.props.t("analytics.selectLocation") ); this.props.parameter.subtype = GeoJsonParameter.PointType; }); }, selectPolygonOnMap() { runInAction(() => { this.props.parameter.setValue(CommonStrata.user, undefined); selectPolygonOnMap( this.props.previewed.terria, this.props.viewState, this.props.parameter ); this.props.parameter.subtype = GeoJsonParameter.PolygonType; }); }, selectExistingPolygonOnMap() { runInAction(() => { this.props.parameter.setValue(CommonStrata.user, undefined); selectExistingPolygonOnMap( this.props.previewed.terria, this.props.viewState, this.props.parameter ); this.props.parameter.subtype = GeoJsonParameter.SelectAPolygonType; }); }, render() { const { t } = this.props; return ( <div> <div> <strong>{t("analytics.selectLocation")}</strong> </div> <div className="container" style={{ marginTop: "10px", marginBottom: "10px", display: "table", width: "100%" }} > <button type="button" onClick={this.selectPointOnMap} className={Styles.btnLocationSelector} > <strong>{t("analytics.point")}</strong> </button> <button type="button" style={{ marginLeft: "2%", marginRight: "2%" }} onClick={this.selectPolygonOnMap} className={Styles.btnLocationSelector} > <strong>{t("analytics.polygon")}</strong> </button> <button type="button" onClick={this.selectExistingPolygonOnMap} className={Styles.btnLocationSelector} > <strong>{t("analytics.existingPolygon")}</strong> </button> </div> <input className={Styles.field} type="text" readOnly value={getDisplayValue( this.props.parameter.value, this.props.parameter )} /> <If condition={ getDisplayValue( this.props.parameter.value, this.props.parameter ) === "" } > <div>{t("analytics.nothingSelected")}</div> </If> </div> ); } }) ); function getDisplayValue(value, parameter) { if (!defined(parameter.subtype)) { return ""; } if (parameter.subtype === GeoJsonParameter.PointType) { return getPointParameterDisplayValue(value); } if (parameter.subtype === GeoJsonParameter.SelectAPolygonType) { return getExistingPolygonParameterDisplayValue(value); } if (parameter.subtype === GeoJsonParameter.PolygonType) { return getPolygonParameterDisplayValue(value); } return getRegionPickerDisplayValue(value, parameter); } module.exports = withTranslation()(GeoJsonParameterEditor);