Proyectos de Subversion LeadersLinked - SPA

Rev

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