|
import { ReactNode, useEffect, useId, useRef } from 'react'; |
|
import { classNames } from '@/shared/lib/classNames/classNames'; |
|
import Checkmark from '@/shared/assets/icons/checkmark.svg?react'; |
|
import cls from './Checkbox.module.scss'; |
|
|
|
interface CheckboxProps { |
|
className?: string; |
|
name: string; |
|
children: ReactNode; |
|
onChange?: (value: string) => void; |
|
inputRef?: (ref: any) => void; |
|
} |
|
export const Checkbox = (props: CheckboxProps) => { |
|
const { className, name, children, onChange, inputRef } = props; |
|
const checkboxId = useId(); |
|
const inputRefValue = useRef(null); |
|
|
|
useEffect(() => { |
|
if (inputRef) inputRef(inputRefValue.current); |
|
}, [inputRefValue.current]); |
|
|
|
return ( |
|
<div className={classNames(cls.Checkbox, {}, [className])}> |
|
<input // |
|
id={checkboxId} |
|
className={`${cls.input} visually-hidden`} |
|
ref={inputRefValue} |
|
name={name} |
|
type="checkbox" |
|
onChange={(e) => onChange?.(e.target.value)} |
|
/> |
|
<label htmlFor={checkboxId} className={cls.name}> |
|
<div className={cls.window}> |
|
<Checkmark className={cls.iconMark} /> |
|
</div> |
|
<div className={cls.content}>{children}</div> |
|
</label> |
|
</div> |
|
); |
|
}; |
|
|