Next.js template
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Checkbox.js 1.1KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import PropTypes from 'prop-types';
  2. import React from 'react';
  3. import { ReactComponent as Checked } from '../../../assets/images/svg/checked.svg';
  4. import { ReactComponent as Unchecked } from '../../../assets/images/svg/unchecked.svg';
  5. const Checkbox = ({ className, children, name, onChange, checked, field }) => (
  6. <label htmlFor={name} className={`c-checkbox ${className || ''}`}>
  7. <input
  8. name={name}
  9. id={name}
  10. className="c-checkbox__field"
  11. type="checkbox"
  12. checked={checked}
  13. {...field}
  14. onChange={onChange || field.onChange}
  15. />
  16. <div className="c-checkbox__indicator">
  17. {checked ? (
  18. <Checked className="c-checkbox__icon" />
  19. ) : (
  20. <Unchecked className="c-checkbox__icon" />
  21. )}
  22. </div>
  23. <div className="c-checkbox__text">{children}</div>
  24. </label>
  25. );
  26. Checkbox.propTypes = {
  27. children: PropTypes.node,
  28. onChange: PropTypes.func,
  29. checked: PropTypes.bool,
  30. name: PropTypes.string,
  31. field: PropTypes.shape({
  32. onChange: PropTypes.func,
  33. }),
  34. className: PropTypes.string,
  35. };
  36. export default Checkbox;