UNPKG

terriajs

Version:

Geospatial data visualization platform.

78 lines (63 loc) 2.62 kB
'use strict'; import defined from 'terriajs-cesium/Source/Core/defined'; import React from 'react'; import createReactClass from 'create-react-class'; import PropTypes from 'prop-types'; import ObserveModelMixin from '../../ObserveModelMixin'; import Styles from './style-selector-section.scss'; const StyleSelectorSection = createReactClass({ displayName: 'StyleSelectorSection', mixins: [ObserveModelMixin], propTypes: { item: PropTypes.object.isRequired }, changeStyle(layer, event) { const item = this.props.item; const layers = item.layers.split(','); const styles = item.styles.split(','); const layerIndex = layers.indexOf(layer.name); if (layerIndex === -1) { // Not a valid layer? Something went wrong. return; } styles[layerIndex] = event.target.value; item.styles = styles.join(','); item.refresh(); }, render() { const item = this.props.item; // This section only makes sense if we have a layer that supports styles. if (item.disableUserChanges || !defined(item.availableStyles) || !defined(item.styles) || !defined(item.layers) || item.layers.length === 0) { return null; } const layerTitles = item.layerTitles; const styles = item.styles.split(','); const layers = item.layers.split(',').map((item, i) => ({ name: item.trim(), title: (layerTitles && layerTitles[i]) || item.trim(), style: styles[i] })); return ( <div className={Styles.styleSelector}> {layers.map(this.renderStyleSelectorForLayer)} </div> ); }, renderStyleSelectorForLayer(layer) { const item = this.props.item; const styles = item.availableStyles[layer.name]; if (!defined(styles) || styles.length < 2) { return null; } const label = item.layers.indexOf(',') >= 0 ? layer.title + ' Style' : 'Style'; return ( <div key={layer.name}> <label className={Styles.title} htmlFor={layer.name}>{label}</label> <select className={Styles.field} name={layer.name} value={layer.style} onChange={this.changeStyle.bind(this, layer)}> {styles.map(item => <option key={item.name} value={item.name}>{item.title}</option>)} </select> </div> ); }, }); module.exports = StyleSelectorSection;