terriajs
Version:
Geospatial data visualization platform.
88 lines (74 loc) • 3.26 kB
JSX
import React from 'react';
import createReactClass from 'create-react-class';
import PropTypes from 'prop-types';
import {addMarker} from '../../Models/LocationMarkerUtils';
import ObserveModelMixin from '../ObserveModelMixin';
import LocationSearchResults from '../Search/LocationSearchResults';
import SearchResult from '../Search/SearchResult';
import Styles from './mobile-search.scss';
// A Location item when doing Bing map searvh or Gazetter search
const MobileSearch = createReactClass({
displayName: 'MobileSearch',
mixins: [ObserveModelMixin],
propTypes: {
viewState: PropTypes.object,
terria: PropTypes.object
},
onLocationClick(result) {
result.clickAction();
addMarker(this.props.terria, result);
// Close modal window
this.props.viewState.switchMobileView(null);
this.props.viewState.searchState.showMobileLocationSearch = false;
},
searchInDataCatalog() {
const viewname = this.props.viewState.mobileViewOptions.data;
this.props.viewState.explorerPanelIsVisible = true;
this.props.viewState.switchMobileView(viewname);
this.props.viewState.searchInCatalog(this.props.viewState.searchState.locationSearchText);
},
render() {
const theme = 'light';
return (
<div className={Styles.mobileSearch}>
<div>
{this.renderSearchInCatalogLink(theme)}
</div>
<div className={Styles.location}>
{this.renderLocationResult(theme)}
</div>
</div>
);
},
renderSearchInCatalogLink(theme) {
return (
<If condition={this.props.viewState.searchState.locationSearchText.length > 0}>
<div className={Styles.providerResult}>
<ul className={Styles.btnList}>
<SearchResult clickAction={this.searchInDataCatalog}
icon={null}
name={`Search for "${this.props.viewState.searchState.locationSearchText}" in the Data Catalogue`}
theme={theme}
/>
</ul>
</div>
</If>
);
},
renderLocationResult(theme) {
const searchState = this.props.viewState.searchState;
return searchState.locationSearchProviders
.filter(search => search.isSearching || (search.searchResults && search.searchResults.length))
.map(search =>
<LocationSearchResults key={search.name}
terria={this.props.terria}
viewState={this.props.viewState}
search={search}
onLocationClick={this.onLocationClick}
isWaitingForSearchToStart={searchState.isWaitingForSearchToStart}
theme={theme}
/>
);
},
});
module.exports = MobileSearch;