import React, { forwardRef, InputHTMLAttributes, ReactNode, useMemo } from 'react'; import { type TStyle, useClassnames } from '../../../hooks/use-classnames'; import ContainerDefault from './img/container/default.svg'; import style from './index.module.pcss'; type TNative = InputHTMLAttributes; export interface IProps { /** * Название поля ввода, которое будет отправлено на сервер вместе со значением. **/ readonly name: string, /** * Позволяет добавить пользовательские CSS-классы **/ readonly className?: string | TStyle, /** * Указывает, находится ли переключатель в неопределенном состоянии. **/ readonly indeterminate?: boolean, /** * Текст метки, связанной с переключателем. **/ readonly label?: string | ReactNode, /** * Значение, которое будет отправлено на сервер при отправке формы. **/ readonly value?: string, /** * Значение переключателя по умолчанию. **/ readonly defaultValue?: string, /** * Дополнительный текст, который поясняет, что выбирает переключатель. **/ readonly description?: string, /** * Устанавливает или определяет, должен ли компонент быть отмечен. **/ readonly checked?: TNative['checked'], /** * Определяет, должен ли флажок быть установлен при первоначальной загрузке компонента. **/ readonly defaultChecked?: TNative['defaultChecked'], /** * Функция обратного вызова, которая будет вызываться при изменении значения переключателя. **/ readonly onChange?: TNative['onChange'], /** * Функция обратного вызова, которая будет вызываться при клике на переключатель. **/ readonly onClick?: TNative['onClick'], /** * Функция обратного вызова, которая будет вызываться при потере фокуса на переключателе. **/ readonly onBlur?: TNative['onBlur'], /** * Функция обратного вызова, которая будет вызываться при получении фокуса на переключателе. **/ readonly onFocus?: TNative['onFocus'], /** * Указывает, должен ли компонент получать фокус при монтировании (отрисовке) на странице. **/ readonly autoFocus?: TNative['autoFocus'], /** * Уникальный идентификатор переключателя. **/ readonly id?: TNative['id'], /** * Порядковый номер элемента при переключении по `Tab`. **/ readonly tabIndex?: TNative['tabIndex'], /** * Определяет, будет ли компонент отключен. **/ readonly disabled?: TNative['disabled'], /** * Устанавливает размер компонента. **/ readonly presetSize?: 'large' | 'medium' | 'small', /** * Предустановленный стиль для компонента. **/ readonly presetStyle?: 'default' | 'default-reverse' | 'card' } /** * Компонент `Checkbox` представляет собой переключатель, который позволяет пользователю выбирать один или несколько вариантов из группы. **/ export const Checkbox = forwardRef(({ tabIndex = 0, presetSize = 'medium', presetStyle = 'default', ...props }, ref) => { const cn = useClassnames(style, props.className); const elLabel = useMemo(() => { if(props.label) { if(typeof props.label === 'string') { return ( ); } else { return props.label; } } }, [props.label]); const elDescription = useMemo(() => { if(props.description) { return ( ); } }, [props.description, presetSize]); const elContent = useMemo(() => { if(!!elLabel || !!elDescription) { return (
{elLabel} {elDescription}
); } }, [elLabel, elDescription]); return ( ); });