summaryrefslogtreecommitdiff
path: root/app/client/common/textInput.component.js
blob: d4299442a5d8805063336718cbf8092eaef96b34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import { h, Component } from 'preact'

class TextInput extends Component {
  constructor(props){
    super(props)
    this.state = { value: null, changed: false }
    this.handleInput = this.handleInput.bind(this)
    this.handleKeydown = this.handleKeydown.bind(this)
  }
  handleInput(e){
    this.setState({
      value: e.target.value,
      changed: true,
    })
    this.props.onInput && this.props.onInput(e.target.value, e.target.name)
  }
  handleKeydown(e){
    if (e.keyCode === 13) {
      this.setState({
        value: e.target.value,
        changed: false,
      })
      this.props.onSave && this.props.onSave(e.target.value, e.target.name)
    }
  }
  render() {
    return (
      <div className='textInput param'>
        <label>
          <span>{this.props.title}</span>
          <input
            type={this.props.type || 'text'}
            name={this.props.name || 'text'}
            value={this.state.changed ? this.state.value : this.props.value}
            onInput={this.handleInput}
            onKeydown={this.handleKeydown}
            placeholder={this.props.placeholder}
            autofocus={this.props.autofocus}
            className={this.props.className || ''}
          />
        </label>
      </div>
    )
  }
}

export default TextInput