auspice
Version:
Web app for visualizing pathogen evolution
56 lines (50 loc) • 1.77 kB
JavaScript
import React from "react";
import { connect } from "react-redux";
import { withTranslation } from "react-i18next";
import { controlsWidth } from "../../util/globals";
import { CHANGE_GEO_RESOLUTION } from "../../actions/types";
import { analyticsControlsEvent } from "../../util/googleAnalytics";
import { SidebarSubtitle } from "./styles";
import CustomSelect from "./customSelect";
((state) => {
return {
metadata: state.metadata,
geoResolution: state.controls.geoResolution
};
})
class GeoResolution extends React.Component {
getGeoResolutionOptions() {
return this.props.metadata.loaded ?
this.props.metadata.geoResolutions.map((g) => ({value: g.key, label: g.title || g.key})) :
[];
}
changeGeoResolution(resolution) {
analyticsControlsEvent("change-geo-resolution");
this.props.dispatch({ type: CHANGE_GEO_RESOLUTION, data: resolution });
}
render() {
const { t } = this.props;
const geoResolutionOptions = this.getGeoResolutionOptions();
return (
<>
<SidebarSubtitle spaceAbove>
{t("sidebar:Geographic resolution")}
</SidebarSubtitle>
<div style={{marginBottom: 10, width: controlsWidth, fontSize: 14}}>
<CustomSelect
name="selectGeoResolution"
id="selectGeoResolution"
value={geoResolutionOptions.filter(({value}) => value === this.props.geoResolution)}
options={geoResolutionOptions}
isClearable={false}
isSearchable={false}
isMulti={false}
onChange={(opt) => {this.changeGeoResolution(opt.value);}}
/>
</div>
</>
);
}
}
const WithTranslation = withTranslation()(GeoResolution);
export default WithTranslation;