terriajs
Version:
Geospatial data visualization platform.
99 lines (82 loc) • 3.22 kB
JSX
import React from 'react';
import createReactClass from 'create-react-class';
import PropTypes from 'prop-types';
import defined from 'terriajs-cesium/Source/Core/defined';
import addedByUser from '../../Core/addedByUser';
import CatalogItem from './CatalogItem';
import getAncestors from '../../Models/getAncestors';
import ObserveModelMixin from '../ObserveModelMixin';
import raiseErrorOnRejectedPromise from '../../Models/raiseErrorOnRejectedPromise';
const STATE_TO_TITLE = {
loading: 'Loading...',
remove: 'Remove this item',
add: 'Add this item. Hold down "shift" to keep the data catalogue open.'
};
// Individual dataset
const DataCatalogItem = createReactClass({
displayName: 'DataCatalogItem',
mixins: [ObserveModelMixin],
propTypes: {
item: PropTypes.object.isRequired,
viewState: PropTypes.object.isRequired
},
onBtnClicked(event) {
if (defined(this.props.item.invoke) || this.props.viewState.useSmallScreenInterface) {
this.setPreviewedItem();
} else {
this.toggleEnable(event);
}
},
toggleEnable(event) {
this.props.item.toggleEnabled();
// set preview as well
this.setPreviewedItem();
if (this.props.item.isEnabled === true && !event.shiftKey && !event.ctrlKey) {
// close modal window
this.props.viewState.explorerPanelIsVisible = false;
this.props.viewState.mobileView = null;
if (this.props.viewState.firstTimeAddingData) {
this.props.viewState.featureInfoPanelIsVisible = true;
}
}
},
setPreviewedItem() {
raiseErrorOnRejectedPromise(this.props.item.terria, this.props.item.load());
this.props.viewState.viewCatalogMember(this.props.item);
// mobile switch to nowvewing
this.props.viewState.switchMobileView(this.props.viewState.mobileViewOptions.preview);
},
isSelected() {
return addedByUser(this.props.item) ?
this.props.viewState.userDataPreviewedItem === this.props.item :
this.props.viewState.previewedItem === this.props.item;
},
render() {
const item = this.props.item;
return (
<CatalogItem
onTextClick={this.setPreviewedItem}
selected={this.isSelected()}
text={item.nameInCatalog}
title={getAncestors(item).map(member => member.nameInCatalog).join(' → ')}
btnState={this.getState()}
onBtnClick={this.onBtnClicked}
titleOverrides={STATE_TO_TITLE}
/>
);
},
getState() {
if (this.props.item.isLoading) {
return 'loading';
} else if (this.props.viewState.useSmallScreenInterface) {
return 'preview';
} else if (this.props.item.isEnabled) {
return 'remove';
} else if (!defined(this.props.item.invoke)) {
return 'add';
} else {
return 'stats';
}
},
});
module.exports = DataCatalogItem;