FormItem

Компонент для создания элементов форм с поддержкой заголовка, подсказки и статуса валидации. Позволяет создавать структурированные и доступные формы с единым стилем оформления. Рекомендуется оборачивать в компонент все поля, кроме Radio и Checkbox, если для них в дизайне не предусмотрены заголовки и иные описательные элементы.

Загружается...

FormItem состоит из трёх основных частей:

  • top — заголовок элемента формы;
  • children — основной контент (поле ввода);
  • bottom — подсказка или сообщение о статусе валидации.
Загружается...

Иногда шапка у поля может быть составной, то есть содержать несколько отдельных компонентов для сегментирования представленной информации. В таком случае воспользуйтесь подкомпонентами, которые позволят вам собрать необходимый заголовок самостоятельно и более гибко управлять передаваемыми в компоненты свойствами (например, для a11y).

  • <FormItem.Top> служит оберткой для составной шапки поля, отвечая за выравнивание контента и расстановку отступов;
  • <FormItem.TopLabel> отвечает за отрисовку заголовка поля. По умолчанию компонент представлен тегом label, если передано свойство htmlFor. Можно переопределить через свойство Component;
  • <FormItem.TopAside> отвечает за отрисовку дополнительного контента справа от заголовка поля.
Загружается...

Свойство 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.

Для возможности тестирования доступны свойства с постфиксом *TestId, которые вы можете использовать, чтобы находить необходимые части компонента:

  • removeButtonTestIdid кнопки удаления при removable={true};
  • toggleButtonTestIdid кнопки подтверждения удаления (только для iOS).

Для корректной работы ассистивных технологий необходимо вручную передавать некоторые параметры:

  • при передаче в FormItem компонента, отвечающего за пользовательский ввод (например, <input type="text" />), рекомендуется передавать свойства top и htmlFor. В компонент пользовательского ввода должно быть передано свойство id, которое соответствует значению htmlFor в FormItem;
  • при использовании свойства bottom рекомендуется также передавать в компонент пользовательского ввода (например, <input type="text" />) свойство aria-describedby, а в сам FormItem передать bottomId, который соответствует значению aria-describedby.
СвойствоОписание
bottomReactNode

Дополнительный элемент, отображаемый под содержимым.

По умолчанию: -
bottomIdstring

Передаётся при использовании bottom.

Должен совпадать с aria-describedby, который передаётся в компонент, отвечающий за пользовательский ввод.

По умолчанию: -
ComponentElementType<any, keyof IntrinsicElements>
По умолчанию: -
getRootRefRef<HTMLElement>
По умолчанию: -
noPaddingboolean

Удаляет внешние отступы вокруг компонента.

По умолчанию: -
onRemove((e: MouseEvent<Element, MouseEvent>, rootEl?: HTMLElement | null) => void) | undefined

Обработчик, срабатывающий при нажатии на контрол удаления.

По умолчанию: -
removableboolean | "indent"

Дает возможность удалить FormItem. Рекомендуется использовать только для Input или Select.

Режим indent предназначен для визуального отступа.

По умолчанию: -
removeButtonTestIdstring

Передает атрибут data-testid для кнопки удаления.

По умолчанию: -
removePlaceholderReactNode

Текст кнопки удаления ячейки. Визуально скрыт везде, кроме iOS. На iOS появляется в выезжающей кнопке для удаления ячейки.

По умолчанию: Удалить
requiredboolean

Помечает поле обязательным.

По умолчанию: false
status"default" | "error" | "valid"

Статус, влияющий на стиль отображения компонента.

По умолчанию: default
toggleButtonTestIdstring

Передает атрибут data-testid для кнопки, которая активирует кнопку удаления (iOS only).

По умолчанию: -
topReactNode

Дополнительный элемент, отображаемый над содержимым.

По умолчанию: -
topComponentElementType<any, keyof IntrinsicElements>

Позволяет поменять тег используемый для top Если оставить пустым, то тег top будет span. Если оставить пустым и использовать htmlFor, то тег top будет label.

По умолчанию: -
topIdstring

Передаётся при использовании top.

id для top.

По умолчанию: -
topMultilineboolean

Многострочный вывод заголовка. По умолчанию текст не переносится при переполнении.

По умолчанию: false
СвойствоОписание
ComponentElementType<any, keyof IntrinsicElements>
По умолчанию: -
getRootRefRef<HTMLDivElement>
По умолчанию: -
СвойствоОписание
ComponentElementType<any, keyof IntrinsicElements>
По умолчанию: -
getRootRefRef<HTMLElement>
По умолчанию: -
СвойствоОписание
ComponentElementType<any, keyof IntrinsicElements>
По умолчанию: -
getRootRefRef<HTMLElement>
По умолчанию: -