FormItem
Компонент для создания элементов форм с поддержкой заголовка, подсказки и статуса валидации.
Позволяет создавать структурированные и доступные формы с единым стилем оформления.
Рекомендуется оборачивать в компонент все поля, кроме Radio и Checkbox, если для
них в дизайне не предусмотрены заголовки и иные описательные элементы.
Структура компонента
FormItem состоит из трёх основных частей:
top— заголовок элемента формы;children— основной контент (поле ввода);bottom— подсказка или сообщение о статусе валидации.
Подкомпоненты
Иногда шапка у поля может быть составной, то есть содержать несколько отдельных компонентов для сегментирования
представленной информации. В таком случае воспользуйтесь подкомпонентами, которые позволят вам собрать необходимый
заголовок самостоятельно и более гибко управлять передаваемыми в компоненты свойствами (например, для a11y).
<FormItem.Top>служит оберткой для составной шапки поля, отвечая за выравнивание контента и расстановку отступов;<FormItem.TopLabel>отвечает за отрисовку заголовка поля. По умолчанию компонент представлен тегомlabel, если передано свойствоhtmlFor. Можно переопределить через свойствоComponent;<FormItem.TopAside>отвечает за отрисовку дополнительного контента справа от заголовка поля.
Состояния
disabled
Свойство disabled блокирует взаимодействие с компонентом и добавляет визуальную индикацию недоступности.
Валидация
Задаётся свойством status.
"default"- обычное состояние компонента (по умолчанию);"error"- состояние ошибки, используйте данное значение, чтобы сообщить пользователю о некорректно введённых данных;"valid"- состояние успешной валидации, используйте для индикации прошедшей проверки или при исправлении ошибки.
Если вы используете значения "error" (реже "valid"), старайтесь сопровождать состояние поясняющим сообщением, например,
используя свойство bottom.
Обязательность поля
Свойство required позволяет пометить поле как обязательное для заполнения.
<FormItem top="Email" required>
<Input type="email" name="email" required />
</FormItem>Удаление поля
Добавить возможность удалить поле можно с помощью свойства removable,
которое добавит кнопку удаления, стилизованную под используемую платформу.
Помимо значений true/false, также принимает значение "indent", которое добавляет визуальный отступ,
позволяя выравнивать удаляемые поля с полями, которые удалить нельзя.
При removable={true} доступны следующие свойства:
removePlaceholder— текст, который будет зачитан скринридером или показан на платформе iOS при взаимодействии с кнопкой удаления (по умолчанию “Удалить”);onRemove— функция-обработчик, которая будет вызвана при нажатии на кнопку удаления.
Отступы
По умолчанию компонент расставляет внешние отступы, чтобы автоматически выравниваться в соответствии с
требованиями дизайн-системы (при использовании в Group, например). Отключить эти отступы можно с помощью свойства noPadding.
Тестирование (e2e)
Для возможности тестирования доступны свойства с постфиксом *TestId, которые вы можете использовать,
чтобы находить необходимые части компонента:
removeButtonTestId—idкнопки удаления приremovable={true};toggleButtonTestId—idкнопки подтверждения удаления (только для iOS).
Доступность (a11y)
Для корректной работы ассистивных технологий необходимо вручную передавать некоторые параметры:
- при передаче в
FormItemкомпонента, отвечающего за пользовательский ввод (например,<input type="text" />), рекомендуется передавать свойстваtopиhtmlFor. В компонент пользовательского ввода должно быть передано свойствоid, которое соответствует значениюhtmlForвFormItem; - при использовании свойства
bottomрекомендуется также передавать в компонент пользовательского ввода (например,<input type="text" />) свойствоaria-describedby, а в самFormItemпередатьbottomId, который соответствует значениюaria-describedby.
Свойства и методы
FormItem
| Свойство | Описание |
|---|---|
bottom | ReactNodeДополнительный элемент, отображаемый под содержимым. По умолчанию: - |
bottomId | stringПередаётся при использовании Должен совпадать с По умолчанию: - |
Component | ElementType<any, keyof IntrinsicElements>По умолчанию: - |
getRootRef | Ref<HTMLElement>По умолчанию: - |
noPadding | booleanУдаляет внешние отступы вокруг компонента. По умолчанию: - |
onRemove | ((e: MouseEvent<Element, MouseEvent>, rootEl?: HTMLElement | null) => void) | undefinedОбработчик, срабатывающий при нажатии на контрол удаления. По умолчанию: - |
removable | boolean | "indent"Дает возможность удалить Режим По умолчанию: - |
removeButtonTestId | stringПередает атрибут По умолчанию: - |
removePlaceholder | ReactNodeТекст кнопки удаления ячейки. Визуально скрыт везде, кроме iOS. На iOS появляется в выезжающей кнопке для удаления ячейки. По умолчанию: Удалить |
required | booleanПомечает поле обязательным. По умолчанию: false |
status | "default" | "error" | "valid"Статус, влияющий на стиль отображения компонента. По умолчанию: default |
toggleButtonTestId | stringПередает атрибут По умолчанию: - |
top | ReactNodeДополнительный элемент, отображаемый над содержимым. По умолчанию: - |
topComponent | ElementType<any, keyof IntrinsicElements>Позволяет поменять тег используемый для top Если оставить пустым, то тег top будет span. Если оставить пустым и использовать htmlFor, то тег top будет label. По умолчанию: - |
topId | stringПередаётся при использовании
По умолчанию: - |
topMultiline | booleanМногострочный вывод заголовка. По умолчанию текст не переносится при переполнении. По умолчанию: false |
FormItem.Top
| Свойство | Описание |
|---|---|
Component | ElementType<any, keyof IntrinsicElements>По умолчанию: - |
getRootRef | Ref<HTMLDivElement>По умолчанию: - |
FormItem.TopLabel
| Свойство | Описание |
|---|---|
Component | ElementType<any, keyof IntrinsicElements>По умолчанию: - |
getRootRef | Ref<HTMLElement>По умолчанию: - |
FormItem.TopAside
| Свойство | Описание |
|---|---|
Component | ElementType<any, keyof IntrinsicElements>По умолчанию: - |
getRootRef | Ref<HTMLElement>По умолчанию: - |