import React from 'react' import JSONEditor from './JSONEditor' import SourceEditor from './SourceEditor' import FilterEditor from '../filter/FilterEditor' import PropertyGroup from '../fields/PropertyGroup' import LayerEditorGroup from './LayerEditorGroup' import LayerSettings from './LayerSettings' import layout from '../../config/layout.json' import { margins, fontSizes } from '../../config/scales' import colors from '../../config/colors' class UnsupportedLayer extends React.Component { render() { return
} } /** Layer editor supporting multiple types of layers. */ export default class LayerEditor extends React.Component { static propTypes = { layer: React.PropTypes.object.isRequired, sources: React.PropTypes.object, vectorLayers: React.PropTypes.object, onLayerChanged: React.PropTypes.func, } static defaultProps = { onLayerChanged: () => {}, onLayerDestroyed: () => {}, } static childContextTypes = { reactIconBase: React.PropTypes.object } constructor(props) { super(props) //TODO: Clean this up and refactor into function const editorGroups = {} layout[this.props.layer.type].groups.forEach(group => { editorGroups[group.title] = true }) this.state = { editorGroups } } componentWillReceiveProps(nextProps) { const additionalGroups = { ...this.state.editorGroups } layout[nextProps.layer.type].groups.forEach(group => { if(!(group.title in additionalGroups)) { additionalGroups[group.title] = true } }) this.setState({ editorGroups: additionalGroups }) } getChildContext () { return { reactIconBase: { size: fontSizes[4], color: colors.lowgray, } } } /** A {@property} in either the paint our layout {@group} has changed * to a {@newValue}. */ onPropertyChange(group, property, newValue) { const changedLayer = { ...this.props.layer, [group]: { ...this.props.layer[group], [property]: newValue } } this.props.onLayerChanged(changedLayer) } onFilterChange(newValue) { const changedLayer = { ...this.props.layer, filter: newValue } this.props.onLayerChanged(changedLayer) } onGroupToggle(groupTitle, active) { const changedActiveGroups = { ...this.state.editorGroups, [groupTitle]: active, } this.setState({ editorGroups: changedActiveGroups }) } renderGroupType(type, fields) { switch(type) { case 'settings': return