UNPKG

terriajs

Version:

Geospatial data visualization platform.

104 lines (88 loc) 3.15 kB
import React from 'react'; import createReactClass from 'create-react-class'; import PropTypes from 'prop-types'; import addedByUser from '../../Core/addedByUser'; import CatalogGroup from './CatalogGroup'; import DataCatalogMember from './DataCatalogMember'; import getAncestors from '../../Models/getAncestors'; import ObserveModelMixin from '../ObserveModelMixin'; const DataCatalogGroup = createReactClass({ displayName: 'DataCatalogGroup', mixins: [ObserveModelMixin], propTypes: { group: PropTypes.object.isRequired, viewState: PropTypes.object.isRequired, /** Overrides whether to get the open state of the group from the group model or manage it internally */ manageIsOpenLocally: PropTypes.bool, userData: PropTypes.bool }, getDefaultProps() { return { manageIsOpenLocally: false, userData: false }; }, getInitialState() { return { /** Only used if manageIsOpenLocally === true */ isOpen: false }; }, toggleStateIsOpen() { this.setState({ isOpen: !this.state.isOpen }); }, isOpen() { if (this.props.manageIsOpenLocally) { return this.state.isOpen; } return this.props.group.isOpen; }, toggleOpen() { if (this.props.manageIsOpenLocally) { this.toggleStateIsOpen(); } this.props.group.toggleOpen(); }, clickGroup() { this.toggleOpen(); this.props.viewState.viewCatalogMember(this.props.group); }, isTopLevel() { const parent = this.props.group.parent; return !parent || !parent.parent; }, isSelected() { return addedByUser(this.props.group) ? this.props.viewState.userDataPreviewedItem === this.props.group : this.props.viewState.previewedItem === this.props.group; }, render() { const group = this.props.group; return ( <CatalogGroup text={group.nameInCatalog} title={getAncestors(group).map(member => member.nameInCatalog).join(' → ')} topLevel={this.isTopLevel()} open={this.isOpen()} loading={group.isLoading} emptyMessage="This group is empty" onClick={this.clickGroup} selected ={this.isSelected()}> <If condition={this.isOpen()}> <For each="item" of={group.items}> <DataCatalogMember key={item.uniqueId} member={item} viewState={this.props.viewState} userData={this.props.userData} overrideOpen={this.props.manageIsOpenLocally} /> </For> </If> </CatalogGroup> ); }, }); module.exports = DataCatalogGroup;