parent
44459e39c3
commit
d33b37cdb9
4 changed files with 99 additions and 18 deletions
@ -0,0 +1,50 @@ |
||||
import { h, Component } from 'preact'; |
||||
import './input.scss'; |
||||
|
||||
class Input extends Component { |
||||
|
||||
renderRadio(props) { |
||||
let inputClasses = 'form-field-input'; |
||||
if (props.error) { |
||||
inputClasses += ' input-error'; |
||||
} |
||||
return <div> |
||||
<label> |
||||
<input className={ inputClasses } type='radio' {...props} /> |
||||
{ props.label } |
||||
</label> |
||||
</div>; |
||||
} |
||||
|
||||
renderTextArea(props) { |
||||
let inputClasses = 'form-field-input'; |
||||
if (props.error) { |
||||
inputClasses += ' input-error'; |
||||
} |
||||
return <div> |
||||
<label |
||||
className='form-field-label' |
||||
htmlFor={props.id} |
||||
>{ props.label }</label> |
||||
<textarea className={inputClasses} {...props} /> |
||||
|
||||
<p className='form-field-error'>{ this.props.error }</p> |
||||
</div>; |
||||
} |
||||
|
||||
render() { |
||||
let { type } = this.props; |
||||
|
||||
switch (this.props.type) { |
||||
case 'radio': |
||||
return this.renderRadio(this.props); |
||||
case 'textarea': |
||||
return this.renderTextArea(this.props); |
||||
default: |
||||
console.warn(`Unsupported input type ${type}`); |
||||
} |
||||
return null; |
||||
} |
||||
} |
||||
|
||||
export default Input; |
@ -0,0 +1,17 @@ |
||||
.form-field-label { |
||||
font-weight: bold |
||||
} |
||||
|
||||
.form-field-error { |
||||
font-weight: bold; |
||||
color: red; |
||||
min-height: 1.5em; |
||||
} |
||||
|
||||
.form-field-input { |
||||
padding: 4px; |
||||
} |
||||
|
||||
.form-field-input.input-error { |
||||
box-shadow: 0 0 2px red; |
||||
} |
Reference in new issue