58 lines
1.4 KiB
CoffeeScript
58 lines
1.4 KiB
CoffeeScript
###
|
|
@todo
|
|
###
|
|
|
|
module.exports = React.createClass
|
|
|
|
# -- States & Properties
|
|
propTypes:
|
|
type : React.PropTypes.string.required
|
|
label : React.PropTypes.string
|
|
value : React.PropTypes.string
|
|
error : React.PropTypes.string
|
|
required : React.PropTypes.bool
|
|
disabled : React.PropTypes.bool
|
|
multiline : React.PropTypes.bool
|
|
onChange : React.PropTypes.func
|
|
|
|
getDefaultProps: ->
|
|
type : "text"
|
|
disabled : false
|
|
multiline : false
|
|
|
|
getInitialState: ->
|
|
value : @props.value
|
|
|
|
# -- Events
|
|
onChange: (event) ->
|
|
@setState value: event.target.value
|
|
@props.onChange? event, @
|
|
|
|
# -- Render
|
|
render: ->
|
|
# -- styles
|
|
style = ""
|
|
style += " error" if @props.error
|
|
# -- tag
|
|
<div data-component-input={@props.type} className={style}>
|
|
{
|
|
if @props.multiline
|
|
<textarea {...@props} onChange={@onChange}>{@state.value}</textarea>
|
|
else
|
|
<input {...@props} value={@state.value} onChange={@onChange} />
|
|
}
|
|
<span className="bar"></span>
|
|
{ <label>{@props.label}</label> if @props.label }
|
|
{ <span className="error">{@props.error}</span> if @props.error }
|
|
</div>
|
|
|
|
# -- Extends
|
|
getValue: ->
|
|
@state.value
|
|
|
|
setValue: (data) ->
|
|
@setState value: data
|
|
|
|
setError: (data = "Unknown error") ->
|
|
@setState error: data
|