Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 1269 | Rev 1271 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1267 stevensc 1
import React, { useState } from 'react'
1257 stevensc 2
import { useController } from 'react-hook-form'
1261 stevensc 3
import styled, { css } from 'styled-components'
1257 stevensc 4
 
5
import FormErrorFeedback from '../FormErrorFeedback'
6
 
7
const CheckboxContainer = styled.div`
1270 stevensc 8
  margin-bottom: 0.5rem;
1257 stevensc 9
 
1258 stevensc 10
  span {
11
    display: inline-block;
12
    width: 15px;
13
    height: 15px;
14
    position: relative;
15
    border: 1px solid #d2d2d2;
16
    border-radius: 100px;
1270 stevensc 17
 
1258 stevensc 18
    &::before {
19
      content: '';
1257 stevensc 20
      border-radius: 100px;
1258 stevensc 21
      background-color: #e44d3a;
22
      width: 8px;
23
      height: 8px;
24
      inset: 0;
25
      margin: auto;
26
      position: absolute;
27
      opacity: 0;
28
      visibility: hidden;
1257 stevensc 29
    }
30
  }
1258 stevensc 31
 
32
  input {
1261 stevensc 33
    display: none;
1258 stevensc 34
  }
35
 
1257 stevensc 36
  label {
37
    font-size: 14px;
38
    margin-left: 10px;
1260 stevensc 39
    line-height: 1;
1257 stevensc 40
  }
1261 stevensc 41
 
42
  ${(props) =>
43
    props.isChecked &&
44
    css`
45
      span::before {
1263 stevensc 46
        visibility: visible;
1261 stevensc 47
        opacity: 1;
48
      }
49
    `}
1257 stevensc 50
`
51
 
1268 stevensc 52
const Checkbox = ({
53
  name,
54
  control,
55
  rules = {},
56
  label = '',
57
  error = '',
1269 stevensc 58
  defaultValue = false
1268 stevensc 59
}) => {
60
  const [isChecked, setChecked] = useState(defaultValue)
1270 stevensc 61
  const { field } = useController({ name, control, defaultValue, rules })
1267 stevensc 62
 
1268 stevensc 63
  const handleChange = (e) => {
64
    setChecked(e.target.checked)
65
    field.onChange(e)
1267 stevensc 66
  }
1266 stevensc 67
 
1257 stevensc 68
  return (
69
    <>
1267 stevensc 70
      <CheckboxContainer isChecked={isChecked}>
1266 stevensc 71
        <label htmlFor={name}>
1270 stevensc 72
          <span></span>
1266 stevensc 73
          <input
74
            type='checkbox'
1268 stevensc 75
            {...field}
1270 stevensc 76
            id={name}
1268 stevensc 77
            checked={isChecked}
78
            onChange={handleChange}
1266 stevensc 79
          />
80
          {label}
81
        </label>
1257 stevensc 82
      </CheckboxContainer>
83
      {error ? <FormErrorFeedback>{error}</FormErrorFeedback> : null}
84
    </>
85
  )
86
}
87
 
88
export default Checkbox