terriajs
Version:
Geospatial data visualization platform.
107 lines (94 loc) • 3.78 kB
JSX
;
import classNames from 'classnames';
import Concept from '../Concept';
import Icon from '../../../Icon.jsx';
import ObserveModelMixin from '../../../ObserveModelMixin';
import React from 'react';
import createReactClass from 'create-react-class';
import PropTypes from 'prop-types';
import Styles from './summary-concept.scss';
const NEW_TEXT = 'New condition';
const OpenInactiveConcept = createReactClass({
displayName: 'OpenInactiveConcept',
mixins: [ObserveModelMixin],
propTypes: {
rootConcept: PropTypes.object.isRequired,
openInactiveConcept: PropTypes.object.isRequired
},
cancel() {
this.props.openInactiveConcept.isOpen = false;
},
back() {
this.props.openInactiveConcept.isOpen = false;
this.props.openInactiveConcept.parent.isOpen = true;
},
render() {
const showControls = this.props.rootConcept.allowMultiple;
return (
<div className={Styles.section}>
<div className={Styles.controls}>
<If condition={showControls}>
<button className={Styles.btnClose} onClick={this.cancel}>
Cancel
</button>
</If>
</div>
<div className={Styles.heading}>
<If condition={this.props.rootConcept !== this.props.openInactiveConcept}>
<If condition={showControls}>
<button className={Styles.btnBack} onClick={this.back}>
<Icon glyph={Icon.GLYPHS.left}/>
</button>
</If>
<div className={classNames({[Styles.indented]: showControls})}>
{this.props.openInactiveConcept.name}
</div>
</If>
<If condition={this.props.rootConcept === this.props.openInactiveConcept}>
{NEW_TEXT}
</If>
</div>
<ul className={Styles.childrenList}>
<For each="child" index="i" of={this.props.openInactiveConcept.items}>
<If condition={child.items && child.items.length > 0}>
<ConceptParent concept={child} key={i}/>
</If>
<If condition={!child.items || child.items.length === 0}>
<li className={Styles.items}>
<ul className={Styles.listReset}>
<Concept concept={child} key={i}/>
</ul>
</li>
</If>
</For>
</ul>
</div>
);
},
});
const ConceptParent = createReactClass({
displayName: 'ConceptParent',
mixins: [ObserveModelMixin],
propTypes: {
concept: PropTypes.object.isRequired
},
open() {
this.props.concept.isOpen = true;
this.props.concept.parent.isOpen = false;
},
render() {
return (
<li>
<div className={Styles.btnAddOpen} onClick={this.open}>
<div className={Styles.controls}>
<Icon glyph={Icon.GLYPHS.closed}/>
</div>
<div className={Styles.condition}>
{this.props.concept.name}
</div>
</div>
</li>
);
},
});
module.exports = OpenInactiveConcept;