terriajs
Version:
Geospatial data visualization platform.
87 lines (75 loc) • 2.13 kB
JSX
;
import React from "react";
import createReactClass from "create-react-class";
import PropTypes from "prop-types";
import Styles from "./parameter-editors.scss";
import RegionPicker, { getDisplayValue } from "./RegionPicker";
import MapInteractionMode from "../../Models/MapInteractionMode";
const RegionParameterEditor = createReactClass({
displayName: "RegionParameterEditor",
propTypes: {
previewed: PropTypes.object,
viewState: PropTypes.object,
parameter: PropTypes.object
},
selectRegionOnMap() {
RegionParameterEditor.selectOnMap(
this.props.viewState,
this.props.parameter,
this.props.previewed
);
},
render() {
return (
<div>
<input
className={Styles.field}
type="text"
readOnly
value={getDisplayValue(
this.props.parameter.value,
this.props.parameter
)}
/>
<button
type="button"
onClick={this.selectRegionOnMap}
className={Styles.btnSelector}
>
Select region
</button>
</div>
);
}
});
/**
* Prompt user to select/draw on map in order to define parameter.
* @param {Object} viewState ViewState.
* @param {FunctionParameter} parameter Parameter.
* @param {Object} previewed Previewed.
*/
RegionParameterEditor.selectOnMap = function (viewState, parameter, previewed) {
const terria = previewed.terria;
// Cancel any feature picking already in progress.
terria.pickedFeatures = undefined;
const pickPointMode = new MapInteractionMode({
message: "Select a region on the map",
onCancel: function () {
terria.mapInteractionModeStack.pop();
viewState.openAddData();
},
buttonText: "Done",
customUi: function Done() {
return (
<RegionPicker
className={Styles.parameterEditor}
previewed={previewed}
parameter={parameter}
/>
);
}
});
terria.mapInteractionModeStack.push(pickPointMode);
viewState.explorerPanelIsVisible = false;
};
module.exports = RegionParameterEditor;