diff --git a/src/components/ErrorPanel.jsx b/src/components/ErrorPanel.jsx
index 31da4e77..ca4c7215 100644
--- a/src/components/ErrorPanel.jsx
+++ b/src/components/ErrorPanel.jsx
@@ -9,14 +9,21 @@ class ErrorPanel extends React.Component {
}
render() {
+ const errors = this.props.messages.map((m, i) => {
+ return
+ {m}
+
+ })
+
return
- {this.props.messages.map(m =>
{m})}
+ {errors}
}
}
diff --git a/src/components/layers/LayerEditor.jsx b/src/components/layers/LayerEditor.jsx
index 5ff2c931..9e678d2a 100644
--- a/src/components/layers/LayerEditor.jsx
+++ b/src/components/layers/LayerEditor.jsx
@@ -1,5 +1,6 @@
import React from 'react'
+import GlSpec from 'mapbox-gl-style-spec/reference/latest.min.js'
import JSONEditor from './JSONEditor'
import FilterEditor from '../filter/FilterEditor'
import PropertyGroup from '../fields/PropertyGroup'
@@ -12,6 +13,7 @@ import LayerSourceLayerBlock from './LayerSourceLayerBlock'
import InputBlock from '../inputs/InputBlock'
import MultiButtonInput from '../inputs/MultiButtonInput'
+import { changeType } from '../../libs/layer'
import layout from '../../config/layout.json'
import { margins, fontSizes } from '../../config/scales'
import colors from '../../config/colors'
@@ -124,7 +126,7 @@ export default class LayerEditor extends React.Component {
/>
this.changeProperty(null, 'type', v)}
+ onChange={newType => this.props.onLayerChanged(changeType(this.props.layer, newType))}
/>
case 'source': return
diff --git a/src/libs/layer.js b/src/libs/layer.js
new file mode 100644
index 00000000..d6df260c
--- /dev/null
+++ b/src/libs/layer.js
@@ -0,0 +1,24 @@
+import GlSpec from 'mapbox-gl-style-spec/reference/latest.js'
+
+export function changeType(layer, newType) {
+ const changedPaintProps = { ...layer.paint }
+ Object.keys(changedPaintProps).forEach(propertyName => {
+ if(!(propertyName in GlSpec['paint_' + newType])) {
+ delete changedPaintProps[propertyName]
+ }
+ })
+
+ const changedLayoutProps = { ...layer.layout }
+ Object.keys(changedLayoutProps).forEach(propertyName => {
+ if(!(propertyName in GlSpec['layout_' + newType])) {
+ delete changedLayoutProps[propertyName]
+ }
+ })
+
+ return {
+ ...layer,
+ paint: changedPaintProps,
+ layout: changedLayoutProps,
+ type: newType,
+ }
+}