Error panel with current map style errors #40

This commit is contained in:
Lukas Martinelli 2016-12-30 13:21:03 +01:00
parent 886c87f231
commit 89d497c73f
5 changed files with 54 additions and 3 deletions

1
.gitignore vendored
View file

@ -2,6 +2,7 @@
logs logs
*.log *.log
*.swp *.swp
*.swo
# Runtime data # Runtime data
pids pids

View file

@ -9,6 +9,7 @@ import LayerList from './layers/LayerList'
import LayerEditor from './layers/LayerEditor' import LayerEditor from './layers/LayerEditor'
import Toolbar from './Toolbar' import Toolbar from './Toolbar'
import AppLayout from './AppLayout' import AppLayout from './AppLayout'
import ErrorPanel from './ErrorPanel'
import GlSpec from 'mapbox-gl-style-spec/reference/latest.js' import GlSpec from 'mapbox-gl-style-spec/reference/latest.js'
import validateStyleMin from 'mapbox-gl-style-spec/lib/validate_style.min' import validateStyleMin from 'mapbox-gl-style-spec/lib/validate_style.min'
@ -34,6 +35,7 @@ export default class App extends React.Component {
}) })
this.state = { this.state = {
errors: [],
mapStyle: style.emptyStyle, mapStyle: style.emptyStyle,
selectedLayerIndex: 0, selectedLayerIndex: 0,
sources: {}, sources: {},
@ -77,9 +79,14 @@ export default class App extends React.Component {
if(errors.length === 0) { if(errors.length === 0) {
this.revisionStore.addRevision(newStyle) this.revisionStore.addRevision(newStyle)
this.saveStyle(newStyle) this.saveStyle(newStyle)
this.setState({ mapStyle: newStyle }) this.setState({
mapStyle: newStyle,
errors: [],
})
} else { } else {
errors.forEach(err => console.error(err.message)) this.setState({
errors: errors.map(err => err.message)
})
} }
} }
@ -187,11 +194,16 @@ export default class App extends React.Component {
onLayerIdChange={this.onLayerIdChange.bind(this)} onLayerIdChange={this.onLayerIdChange.bind(this)}
/> : null /> : null
const bottomPanel = this.state.errors.length > 0 ? <ErrorPanel
messages={this.state.errors}
/> : null
return <AppLayout return <AppLayout
toolbar={toolbar} toolbar={toolbar}
layerList={layerList} layerList={layerList}
layerEditor={layerEditor} layerEditor={layerEditor}
map={this.mapRenderer()} map={this.mapRenderer()}
bottom={bottomPanel}
/> />
} }
} }

View file

@ -11,6 +11,7 @@ class AppLayout extends React.Component {
layerList: React.PropTypes.element.isRequired, layerList: React.PropTypes.element.isRequired,
layerEditor: React.PropTypes.element, layerEditor: React.PropTypes.element,
map: React.PropTypes.element.isRequired, map: React.PropTypes.element.isRequired,
bottom: React.PropTypes.element,
} }
static childContextTypes = { static childContextTypes = {
@ -60,6 +61,18 @@ class AppLayout extends React.Component {
</ScrollContainer> </ScrollContainer>
</div> </div>
{this.props.map} {this.props.map}
{this.props.bottom && <div style={{
position: 'fixed',
height: 50,
bottom: 0,
left: 550,
zIndex: 1,
width: '100%',
backgroundColor: colors.black
}}>
{this.props.bottom}
</div>
}
</div> </div>
} }
} }

View file

@ -0,0 +1,25 @@
import React from 'react'
import Paragraph from './Paragraph'
import colors from '../config/colors'
import { fontSizes, margins } from '../config/scales'
class ErrorPanel extends React.Component {
static propTypes = {
messages: React.PropTypes.array,
}
render() {
return <div style={{
padding: margins[1],
}}>
{this.props.messages.map(m => <Paragraph style={{
color: colors.red,
margin: 0,
lineHeight: 1.2,
}}>{m}</Paragraph>)}
</div>
}
}
export default ErrorPanel

View file

@ -8,7 +8,7 @@ const baseColors = {
blue: '#00d9f7', blue: '#00d9f7',
green: '#B4C7AD', green: '#B4C7AD',
orange: '#fb3', orange: '#fb3',
red: '#f04', red: '#cf4a4a',
} }
const themeColors = { const themeColors = {