import React from 'react' import Color from 'color' import Button from '../Button' import SpecField from './SpecField' import NumberInput from '../inputs/NumberInput' import DocLabel from './DocLabel' import InputBlock from '../inputs/InputBlock' import AddIcon from 'react-icons/lib/md/add-circle-outline' import DeleteIcon from 'react-icons/lib/md/delete' import FunctionIcon from 'react-icons/lib/md/functions' import capitalize from 'lodash.capitalize' function isZoomField(value) { return typeof value === 'object' && value.stops } /** Supports displaying spec field for zoom function objects * https://www.mapbox.com/mapbox-gl-style-spec/#types-function-zoom-property */ export default class ZoomSpecProperty extends React.Component { static propTypes = { onChange: React.PropTypes.func.isRequired, fieldName: React.PropTypes.string.isRequired, fieldSpec: React.PropTypes.object.isRequired, value: React.PropTypes.oneOfType([ React.PropTypes.object, React.PropTypes.string, React.PropTypes.number, React.PropTypes.bool, ]), } addStop() { const stops = this.props.value.stops.slice(0) const lastStop = stops[stops.length - 1] stops.push([lastStop[0] + 1, lastStop[1]]) const changedValue = { ...this.props.value, stops: stops, } this.props.onChange(this.props.fieldName, changedValue) } deleteStop(stopIdx) { const stops = this.props.value.stops.slice(0) stops.splice(stopIdx, 1) let changedValue = { ...this.props.value, stops: stops, } if(stops.length === 1) { changedValue = stops[0][1] } this.props.onChange(this.props.fieldName, changedValue) } makeZoomFunction() { const zoomFunc = { stops: [ [6, this.props.value], [10, this.props.value] ] } this.props.onChange(this.props.fieldName, zoomFunc) } changeStop(changeIdx, zoomLevel, value) { const stops = this.props.value.stops.slice(0) stops[changeIdx] = [zoomLevel, value] const changedValue = { ...this.props.value, stops: stops, } this.props.onChange(this.props.fieldName, changedValue) } renderZoomProperty() { const zoomFields = this.props.value.stops.map((stop, idx) => { const zoomLevel = stop[0] const value = stop[1] const deleteStopBtn= return
this.changeStop(idx, changedStop, value)} min={0} max={22} />
this.changeStop(idx, zoomLevel, newValue)} />
}) return
{zoomFields}
} renderProperty() { let zoomBtn = null if(this.props.fieldSpec['zoom-function']) { zoomBtn = } return } render() { if(isZoomField(this.props.value)) { return this.renderZoomProperty(); } else { return this.renderProperty(); } } } function MakeZoomFunctionButton(props) { return } function DeleteStopButton(props) { return } function labelFromFieldName(fieldName) { let label = fieldName.split('-').slice(1).join(' ') return capitalize(label) }