maputnik/src/components/inputs/FontInput.jsx

55 lines
1.3 KiB
React
Raw Normal View History

2016-12-30 18:13:41 +01:00
import React from 'react'
2016-12-30 20:53:12 +01:00
import AutocompleteInput from './AutocompleteInput'
2016-12-30 18:13:41 +01:00
import input from '../../config/input.js'
2017-01-09 22:09:15 +01:00
import { margins } from '../../config/scales.js'
2016-12-30 18:13:41 +01:00
//TODO: Query available font stack dynamically
import fontStacks from '../../config/fontstacks.json'
2016-12-30 18:13:41 +01:00
class FontInput extends React.Component {
static propTypes = {
value: React.PropTypes.array.isRequired,
fonts: React.PropTypes.array,
2016-12-30 18:13:41 +01:00
style: React.PropTypes.object,
onChange: React.PropTypes.func.isRequired,
}
static defaultProps = {
fonts: []
}
2016-12-30 18:13:41 +01:00
get values() {
return this.props.value || this.props.default.slice(1) || []
2016-12-30 18:13:41 +01:00
}
changeFont(idx, newValue) {
const changedValues = this.values.slice(0)
changedValues[idx] = newValue
this.props.onChange(changedValues)
}
render() {
const inputs = this.values.map((value, i) => {
2016-12-30 20:53:12 +01:00
return <AutocompleteInput
2016-12-30 18:13:41 +01:00
key={i}
value={value}
options={this.props.fonts.map(f => [f, f])}
2016-12-30 18:13:41 +01:00
onChange={this.changeFont.bind(this, i)}
2017-01-09 22:09:15 +01:00
wrapperStyle={{
display: 'block',
marginBottom: i == this.values.length - 1 ? 0 : margins[2],
}}
2016-12-30 18:13:41 +01:00
/>
})
2017-01-09 22:09:15 +01:00
return <div style={{
display: 'inline-block',
...this.props.style
}}>
2016-12-30 18:13:41 +01:00
{inputs}
</div>
}
}
export default FontInput