Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 1266 | Rev 1268 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import React, { useState } from 'react'
import { useController } from 'react-hook-form'
import styled, { css } from 'styled-components'

import FormErrorFeedback from '../FormErrorFeedback'

const CheckboxContainer = styled.div`
  display: inline-flex;
  align-items: center;
  * {
    cursor: pointer;
  }

  span {
    display: inline-block;
    width: 15px;
    height: 15px;
    position: relative;
    border: 1px solid #d2d2d2;
    border-radius: 100px;
    &::before {
      content: '';
      border-radius: 100px;
      background-color: #e44d3a;
      width: 8px;
      height: 8px;
      inset: 0;
      margin: auto;
      position: absolute;
      opacity: 0;
      visibility: hidden;
    }
  }

  input {
    display: none;
  }

  label {
    font-size: 14px;
    margin-left: 10px;
    line-height: 1;
  }

  ${(props) =>
    props.isChecked &&
    css`
      margin-bottom: 0.5rem;
      span::before {
        visibility: visible;
        opacity: 1;
      }
    `}
`

const Checkbox = ({ name, control, rules = {}, label = '', error = '' }) => {
  const [isChecked, setIsChecked] = useState(false)

  const { field } = useController({
    name,
    control,
    rules
  })

  field.onChange = (e) => {
    setIsChecked(e.target.checked)
  }

  return (
    <>
      <CheckboxContainer isChecked={isChecked}>
        <span></span>
        <label htmlFor={name}>
          <input
            type='checkbox'
            name={field.name}
            id={field.name}
            ref={field.ref}
          />
          {label}
        </label>
      </CheckboxContainer>
      {error ? <FormErrorFeedback>{error}</FormErrorFeedback> : null}
    </>
  )
}

export default Checkbox