mirror of
https://github.com/maputnik/editor.git
synced 2025-12-24 07:00:01 +00:00
94 lines
2.1 KiB
JavaScript
94 lines
2.1 KiB
JavaScript
import React from 'react'
|
|
import PropTypes from 'prop-types'
|
|
|
|
class StringInput extends React.Component {
|
|
static propTypes = {
|
|
"data-wd-key": PropTypes.string,
|
|
value: PropTypes.string,
|
|
style: PropTypes.object,
|
|
default: PropTypes.string,
|
|
onChange: PropTypes.func,
|
|
onInput: PropTypes.func,
|
|
multi: PropTypes.bool,
|
|
required: PropTypes.bool,
|
|
disabled: PropTypes.bool,
|
|
spellCheck: PropTypes.bool,
|
|
}
|
|
|
|
static defaultProps = {
|
|
onInput: () => {},
|
|
}
|
|
|
|
constructor(props) {
|
|
super(props)
|
|
this.state = {
|
|
editing: false,
|
|
value: props.value || ''
|
|
}
|
|
}
|
|
|
|
static getDerivedStateFromProps(props, state) {
|
|
if (!state.editing) {
|
|
return {
|
|
value: props.value
|
|
};
|
|
}
|
|
return {};
|
|
}
|
|
|
|
render() {
|
|
let tag;
|
|
let classes;
|
|
|
|
if(!!this.props.multi) {
|
|
tag = "textarea"
|
|
classes = [
|
|
"maputnik-string",
|
|
"maputnik-string--multi"
|
|
]
|
|
}
|
|
else {
|
|
tag = "input"
|
|
classes = [
|
|
"maputnik-string"
|
|
]
|
|
}
|
|
|
|
if(!!this.props.disabled) {
|
|
classes.push("maputnik-string--disabled");
|
|
}
|
|
|
|
return React.createElement(tag, {
|
|
"data-wd-key": this.props["data-wd-key"],
|
|
spellCheck: this.props.hasOwnProperty("spellCheck") ? this.props.spellCheck : !(tag === "input"),
|
|
disabled: this.props.disabled,
|
|
className: classes.join(" "),
|
|
style: this.props.style,
|
|
value: this.state.value === undefined ? "" : this.state.value,
|
|
placeholder: this.props.default,
|
|
onChange: e => {
|
|
this.setState({
|
|
editing: true,
|
|
value: e.target.value
|
|
}, () => {
|
|
this.props.onInput(this.state.value);
|
|
});
|
|
},
|
|
onBlur: () => {
|
|
if(this.state.value!==this.props.value) {
|
|
this.setState({editing: false});
|
|
this.props.onChange(this.state.value);
|
|
}
|
|
},
|
|
onKeyDown: (e) => {
|
|
if (e.keyCode === 13) {
|
|
this.props.onChange(this.state.value);
|
|
}
|
|
},
|
|
required: this.props.required,
|
|
});
|
|
}
|
|
}
|
|
|
|
export default StringInput
|