terriajs
Version:
Geospatial data visualization platform.
62 lines (51 loc) • 2.23 kB
JSX
import React from 'react';
import createReactClass from 'create-react-class';
import PropTypes from 'prop-types';
import DataPreviewMap from './DataPreviewMap';
import Description from './Description';
import ObserveModelMixin from '../ObserveModelMixin';
import Styles from './mappable-preview.scss';
/**
* CatalogItem preview that is mappable (as opposed to say, an analytics item that can't be displayed on a map without
* configuration of other parameters.
*/
const MappablePreview = createReactClass({
displayName: 'MappablePreview',
mixins: [ObserveModelMixin],
propTypes: {
previewed: PropTypes.object.isRequired,
terria: PropTypes.object.isRequired,
viewState: PropTypes.object.isRequired
},
toggleOnMap(event) {
this.props.previewed.toggleEnabled();
if (this.props.previewed.isEnabled === true && !event.shiftKey && !event.ctrlKey) {
this.props.viewState.explorerPanelIsVisible = false;
this.props.viewState.mobileView = null;
}
},
backToMap() {
this.props.viewState.explorerPanelIsVisible = false;
},
render() {
const catalogItem = this.props.previewed.nowViewingCatalogItem || this.props.previewed;
return (
<div className={Styles.root}>
<If condition={catalogItem.isMappable}>
<DataPreviewMap terria={this.props.terria}
previewedCatalogItem={catalogItem}
showMap={!this.props.viewState.explorerPanelAnimating || this.props.viewState.useSmallScreenInterface} />
</If>
<button type='button' onClick={this.toggleOnMap}
className={Styles.btnAdd}>
{this.props.previewed.isEnabled ? 'Remove from the map' : 'Add to the map'}
</button>
<div className={Styles.previewedInfo}>
<h3 className={Styles.h3}>{catalogItem.name}</h3>
<Description item={catalogItem} />
</div>
</div>
);
},
});
export default MappablePreview;