import React from 'react' import Immutable from 'immutable' import Toolbar from 'rebass/dist/Toolbar' import NavItem from 'rebass/dist/NavItem' import Space from 'rebass/dist/Space' import Tabs from 'react-simpletabs' import theme from '../theme.js' import FillLayer from './fill.jsx' import LineLayer from './line.jsx' import SymbolLayer from './symbol.jsx' import BackgroundLayer from './background.jsx' import SourceEditor from './source.jsx' import FilterEditor from '../filter/editor.jsx' import MdVisibility from 'react-icons/lib/md/visibility' import MdVisibilityOff from 'react-icons/lib/md/visibility-off' import MdDelete from 'react-icons/lib/md/delete' import PureRenderMixin from 'react-addons-pure-render-mixin'; import ScrollContainer from '../scrollcontainer.jsx' class UnsupportedLayer extends React.Component { render() { return
} } /** Layer editor supporting multiple types of layers. */ export class LayerEditor extends React.Component { static propTypes = { layer: React.PropTypes.object.isRequired, sources: React.PropTypes.instanceOf(Immutable.Map), onLayerChanged: React.PropTypes.func, onLayerDestroyed: React.PropTypes.func, } static defaultProps = { onLayerChanged: () => {}, onLayerDestroyed: () => {}, } static childContextTypes = { reactIconBase: React.PropTypes.object } constructor(props) { super(props); this.shouldComponentUpdate = PureRenderMixin.shouldComponentUpdate.bind(this); } getChildContext () { return { reactIconBase: { size: theme.fontSizes[4], color: theme.colors.lowgray, } } } onPaintChanged(property, newValue) { let layer = this.props.layer //TODO: by using immutable records we can avoid this checking if object exists // if(!layer.has('paint')) { layer = layer.set('paint', Immutable.Map()) } const changedLayer = layer.setIn(['paint', property], newValue) this.props.onLayerChanged(changedLayer) } onLayoutChanged(property, newValue) { let layer = this.props.layer //TODO: by using immutable records we can avoid this checking if object exists if(!layer.has('layout')) { layer = layer.set('layout', Immutable.Map()) } const changedLayer = layer.setIn(['layout', property], newValue) this.props.onLayerChanged(changedLayer) } onFilterChanged(newValue) { let layer = this.props.layer const changedLayer = layer.set('filter', newValue) this.props.onLayerChanged(changedLayer) } layerFromType(type) { if (type === "fill") { return