terriajs
Version:
Geospatial data visualization platform.
86 lines (73 loc) • 3.49 kB
JSX
import defined from 'terriajs-cesium/Source/Core/defined';
import FeatureInfoSection from './FeatureInfoSection.jsx';
import ObserveModelMixin from '../ObserveModelMixin';
import React from 'react';
import createReactClass from 'create-react-class';
import PropTypes from 'prop-types';
import Styles from './feature-info-catalog-item.scss';
// Any Catalog in a feature-info-panel
const FeatureInfoCatalogItem = createReactClass({
displayName: 'FeatureInfoCatalogItem',
mixins: [ObserveModelMixin],
propTypes: {
features: PropTypes.array,
catalogItem: PropTypes.object,
terria: PropTypes.object.isRequired,
viewState: PropTypes.object.isRequired,
onToggleOpen: PropTypes.func.isRequired,
printView: PropTypes.bool
},
render() {
const features = this.props.features;
const catalogItem = this.props.catalogItem;
const terria = this.props.terria;
let featureInfoSections = null;
let featureInfoTemplate;
let totalFeaturesCount = 0;
let hiddenNumber;
let maximumShownFeatureInfos = terria.configParameters.defaultMaximumShownFeatureInfos;
if (defined(features)) {
// Display no more than defined number of feature infos
totalFeaturesCount = features.length;
if (defined(catalogItem)) {
maximumShownFeatureInfos = catalogItem.maximumShownFeatureInfos;
featureInfoTemplate = catalogItem.featureInfoTemplate;
}
hiddenNumber = totalFeaturesCount - maximumShownFeatureInfos; // A positive hiddenNumber => some are hidden; negative means none are.
featureInfoSections = features.slice(0, maximumShownFeatureInfos).map((feature, i) => {
return (
<FeatureInfoSection key={i}
viewState={this.props.viewState}
catalogItem={catalogItem}
feature={feature}
position={terria.pickedFeatures && terria.pickedFeatures.pickPosition}
template={featureInfoTemplate}
isOpen={feature === terria.selectedFeature || this.props.printView}
onClickHeader={this.props.onToggleOpen}
printView={this.props.printView}
/>
);
});
}
return (
<li className={Styles.group}>
<ul className={Styles.sections}>
<If condition={hiddenNumber === 1}>
<li className={Styles.messageItem}>
<strong>More than {maximumShownFeatureInfos} {catalogItem.name} features were found.</strong><br/>
The first {maximumShownFeatureInfos} are shown below.
</li>
</If>
<If condition={hiddenNumber > 1}>
<li className={Styles.messageItem}>
<strong>{totalFeaturesCount} {catalogItem.name} features were found.</strong><br/>
The first {maximumShownFeatureInfos} are shown below.
</li>
</If>
{featureInfoSections}
</ul>
</li>
);
},
});
module.exports = FeatureInfoCatalogItem;