Checkbox.jsx 1.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import React from 'react'
  2. import PropTypes from 'prop-types'
  3. import classnames from 'classnames'
  4. const style = {
  5. label: {
  6. position: 'relative',
  7. width: '18px',
  8. height: '18px',
  9. border: '1px solid #999',
  10. borderRadius: '3px',
  11. backgroundColor: '#eee',
  12. cursor: 'pointer'
  13. },
  14. checked: {
  15. position: 'absolute',
  16. top: '-3px',
  17. left: '2px',
  18. fontSize: '18px',
  19. color: '#333'
  20. },
  21. input: {
  22. width: '0',
  23. height: '0',
  24. visibility: 'hidden'
  25. },
  26. disabled: {
  27. cursor: 'default'
  28. }
  29. }
  30. export const Checkbox = props =>
  31. <label
  32. className={classnames('checkboxCustom', {'checked': props.checked})}
  33. style={{
  34. ...style.label,
  35. ...(props.disabled ? style.disabled : {})
  36. }}
  37. onClick={props.onClickCheckbox}
  38. >
  39. { props.checked && <div className='checboxCustom__checked' style={style.checked}>✔</div> }
  40. <input
  41. type='checkbox'
  42. name={`checkbox-${props.name}`}
  43. checked={props.checked}
  44. defaultChecked={props.defaultChecked}
  45. onChange={() => {}} // to remove warning
  46. style={style.input}
  47. disabled={props.disabled}
  48. />
  49. </label>
  50. Checkbox.propTypes = {
  51. name: PropTypes.string.isRequired,
  52. onClickCheckbox: PropTypes.func.isRequired,
  53. checked: PropTypes.bool,
  54. defaultChecked: PropTypes.bool,
  55. disabled: PropTypes.bool
  56. }
  57. Checkbox.defaultProps = {
  58. checked: false,
  59. disabled: false
  60. }
  61. export default Checkbox