ChipsSelect
Компонент для выбора множества значений из выпадающего списка.
Позволяет пользователю выбирать опции из предустановленного списка или создавать новые значения. Каждый выбранный элемент
представлен в виде отдельного компонента Chip
.
Связанные компоненты:
Режим работы
Компонент поддерживает работу как в неконтролируемом режиме, так и контролируемом. Это стандартное поведение React-компонентов, прочитать про это можно в документации React ↗.
Для использования неконтролируемого режима достаточно просто не передавать value
или передавать defaultValue
, если
требуется задать значение по умолчанию.
Для контролируемого режима используйте связку свойств value
/onChange
для задания значения и его изменения.
// Неконтролируемое состояние
<ChipsSelect
defaultValue={[
{
value: 'red',
label: 'Красный',
},
]}
/>;
// Контролируемое состояние
const [colors, setColors] = React.useState([]);
<ChipsSelect value={colors} onChange={setColors} />;
Управление вводом
Добавление нового значения
Свойство creatable
позволяет добавлять значения, которых нет в списке.
true
- значение добавляется по нажатию клавишиEnter
;- строковое значение - помимо клавиши
Enter
, в списке появляется кнопка, нажатие на которую приводит к добавлению значения.
Разделитель
Задаётся свойством delimiter
. Позволяет добавлять несколько элементов за раз, разделяя их указанным символом.
Представляет собой символ, который будет использоваться как разделитель для автоматического создания опций из текста,
введенного или вставленного в поле ввода. Например, при delimiter=","
вставка текста “Красный,Синий” в поле ввода
создаст два элемента - “Красный” и “Синий”.
Пока поддерживаются только строковые символы.
Потеря фокуса
По умолчанию при потере полем фокуса добавления в список опций не происходит.
С помощью свойства addOnBlur
можно включить поведение, при котором потеря фокуса будет приводить к добавлению нового элемента.
Состояния
disabled
Свойство disabled
блокирует взаимодействие с компонентом и добавляет визуальную индикацию недоступности.
Валидация
Свойство status
используется для визуализации валидации компонента - некорректности заполненного поля (значение "error"
)
или успешной валидации (значение "valid"
).
Кастомизация
Визуальное оформление
С помощью свойства renderChip
можно влиять на отображение конкретного значения. Вы можете изменить
стандартный компонент Chip
или использовать свой компонент.
С помощью свойства renderOption
можно влиять на отображение конкретного элемента выпадающего списка.
Вы можете изменить стандартный компонент CustomSelectOption
или использовать свой компонент.
Важно отметить, что первым параметром в обработчика renderChip
/renderOption
идёт объект со свойствами, необходимыми для
корректной работы a11y
. Если для отображения элемента вы используете свой компонент, убедитесь, что все эти свойства
компонент получает и корректно обрабатывает. Вторым параметром идёт объект со значением конкретной опции
(значение, переданное в value
/defaultValue
).
Доступность (a11y)
Компонент обеспечивает базовую доступность через стандартные HTML
-атрибуты и ARIA
-роли.
Для улучшения доступности рекомендуется связывать компонент с текстовым описанием одним из следующих способов:
-
обернуть в
<label>
;<label> Список исполнителей <ChipsSelect options={colors} placeholder="Введите название" /> </label>
-
указать
id
илиaria-describedby
и передать в<label>
илиFormItem
черезhtmlFor
;<label htmlFor="chips">Список исполнителей</label> <ChipsSelect options={colors} placeholder="Введите название" id="chips"/>
<FormItem top="Список исполнителей" htmlFor="chips"> <ChipsSelect options={colors} placeholder="Введите название" id="chips" /> </FormItem>
-
указать
aria-label
;<ChipsSelect options={colors} placeholder="Введите название" aria-label="Список исполнителей" />
При необходимости, через свойство chipsListLabel
можете указать описания списка выбранных опций.
Свойства и методы
Свойство | Описание |
---|---|
addOnBlur | boolean Добавляет значение в список на событие По умолчанию: - |
align | AlignType По умолчанию: - |
allowClearButton | boolean Если По умолчанию: - |
before | ReactNode Добавляет иконку слева. Рекомендации:
По умолчанию: - |
chipsListLabel | string
По умолчанию: - |
ClearButton | ComponentType<FormFieldClearButtonProps> Кастомная кнопка для очистки значения.
Должна принимать обязательное свойство По умолчанию: - |
clearButtonShown | boolean Показывать ли кнопку для очистки значения. По умолчанию: - |
clearButtonTestId | string (e2e) testId кнопки очистки. По умолчанию: - |
closeAfterSelect | boolean Закрытие выпадающего списка после выбора элемента. По умолчанию: true |
creatable | string | boolean Возможность создавать чипы которых нет в списке:
По умолчанию: false |
defaultInputValue | string Значение поля ввода по умолчанию. По умолчанию: - |
defaultValue | Option[] Выбранные опции по умолчанию. По умолчанию: - |
delimiter | string | RegExp | string[] Символ или строка, которая будет использоваться как разделитель для автоматического создания опций из текста, введенного в поле ввода. Принимает:
Работает в двух сценариях:
По умолчанию: - |
disabled | boolean Блокировка взаимодействия с компонентом. По умолчанию: - |
dropdownAutoWidth | boolean Ширина раскрывающегося списка зависит от контента. По умолчанию: - |
dropdownOffsetDistance | number Отступ от выпадающего списка. По умолчанию: 0 |
dropdownTestId | string Передает атрибут По умолчанию: - |
emptyText | string Текст, который показывается если список опций пуст. По умолчанию: Ничего не найдено |
fetching | boolean Отрисовка Spinner вместо списка опций в выпадающем списке. По умолчанию: false |
filterFn | false | FilterFn<Option> Функция для фильтрации опций в списке. По умолчанию: - |
forceDropdownPortal | boolean Принудительно использовать портал. По умолчанию: - |
getNewOptionData | GetNewOptionData<Option> Функция для создания новой опции. По умолчанию: - |
getOptionLabel | GetOptionLabel<Option> Селектор пользовательского представления. По умолчанию: - |
getOptionValue | GetOptionValue<Option> Селектор значения. По умолчанию: - |
getRef | Ref<HTMLInputElement> По умолчанию: - |
getRootRef | Ref<HTMLDivElement> Ссылка на корневой элемент. По умолчанию: - |
icon | ReactNode Иконка раскрывающегося списка. По умолчанию: - |
inputValue | string Значение поля ввода. По умолчанию: - |
mode | "default" | "plain" Режим отображения.
По умолчанию: - |
noMaxHeight | boolean Отключает максимальную высоту по умолчанию. По умолчанию: false |
onChange | OnChange<Option> Обработчик изменения выбранных опций. По умолчанию: - |
onChangeStart | ((event: MouseEvent<Element, MouseEvent> | KeyboardEvent<Element>, option: Option) => void) Событие срабатывающее перед По умолчанию: - |
onClose | VoidFunction Будет вызвано в момент скрытия выпадающего списка. По умолчанию: - |
onInputChange | OnInputChange Обработчик изменения значения в поле ввода. По умолчанию: - |
onOpen | VoidFunction Будет вызвано в момент открытия выпадающего списка. По умолчанию: - |
options | Option[] Список опций в выпадающем списке. По умолчанию: - |
overscrollBehavior | "auto" | "none" | "contain" Поведение overscroll, подробнее можно почитать в документации ↗. По умолчанию: - |
placement | "top" | "bottom" Расположение выпадающего списка. По умолчанию: bottom |
renderChip | RenderChip<Option> Render prop функция для возврата своего компонента. По умолчанию: Используется [Chip](#/Chip) |
renderDropdown | (({ defaultDropdownContent, }: { defaultDropdownContent: ReactNode; }) => ReactNode) Рендер-проп для кастомного рендера содержимого дропдауна.
В По умолчанию: - |
renderOption | ((props: CustomSelectOptionProps, option: Option) => ReactNode) Функция для отрисовки кастомной опции в выпадающем списке. По умолчанию: (props: CustomSelectOptionProps): React.ReactNode => (
<CustomSelectOption {...props} />
) |
selectedBehavior | "hide" | "highlight" Показывать или скрывать уже выбранные опции. По умолчанию: highlight |
sortFn | false | SortFn<Option> Функция для сортировки опций в списке. По умолчанию: false |
status | "default" | "error" | "valid" Статус отображения поля в форме. По умолчанию: default |
value | Option[] Выбранные опции. По умолчанию: - |