Rev 1437 | 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 '../form/FormErrorFeedback';
const CheckboxContainer = styled.div`
margin-bottom: 0.5rem;
label {
font-size: 14px;
line-height: 1;
cursor: pointer;
display: inline-flex;
align-items: center;
}
span {
display: inline-block;
width: 15px;
height: 15px;
position: relative;
border: 1px solid #d2d2d2;
border-radius: 100px;
margin-right: 0.5rem;
&::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;
}
${(props) =>
props.isChecked &&
css`
span::before {
visibility: visible;
opacity: 1;
}
`}
`;
const Checkbox = ({ name, control, rules = {}, label = '', error = '', defaultValue = false }) => {
const [isChecked, setChecked] = useState(defaultValue);
const { field } = useController({ name, control, defaultValue, rules });
const handleChange = (e) => {
setChecked(e.target.checked);
field.onChange(e);
};
return (
<>
<CheckboxContainer isChecked={isChecked}>
<label htmlFor={name}>
<span></span>
<input type='checkbox' {...field} id={name} checked={isChecked} onChange={handleChange} />
{label}
</label>
</CheckboxContainer>
{error ? <FormErrorFeedback>{error}</FormErrorFeedback> : null}
</>
);
};
export default Checkbox;