import { MultipleSelect } from '@megafon/ui-core';Демо данныеconst items = [{ title: 'Абхазия', value: 'ABH' },{ title: 'Армения', value: 'ARM' },{ title: 'Беларусь', value: 'BLR' },{ title: 'Вьетнам', value: 'VNM' },{ title: 'Грузия', value: 'GEO' },{ title: 'Египет', value: 'EGY' },{ title: 'Индия', value: 'IND' },{ title: 'Казахстан', value: 'KAZ' },{ title: 'Китай', value: 'CHN' },{ title: 'Мальдивы', value: 'MDV' },{ title: 'ОАЭ', value: 'ARE' },{ title: 'Таиланд', value: 'THA' },{ title: 'Турция', value: 'TUR' },{ title: 'Узбекистан', value: 'UZB' },];
<MultipleSelect items={items} placeholder="Placeholder" /> <MultipleSelect items={items} selectedItems={items.slice(0,1)} placeholder="Добавить маршрут" selectLimit={3} noticeText="Одновременно можно выбрать максимум 3 страны" />
<MultipleSelect items={items} placeholder="Добавить маршрут" noticeText="Одновременно можно выбрать максимум 3 страны" selectLimit={3} disabled /> <MultipleSelect items={items} selectedItems={items.slice(0,3)} noticeText="Одновременно можно выбрать максимум 3 страны" disabled />
<MultipleSelect items={items} placeholder="Код страны (например, BLR)" customSearchFilter={(item, query) => item.value === query} />
<DemoMultipleSelectWrapper> {({ items, selectedItems, onSelect, onSearch }) => ( <MultipleSelect isControlled items={items} selectedItems={selectedItems} placeholder="Добавить маршрут" selectLimit={3} onSelect={onSelect} onSearch={onSearch} searchDelay={250} /> )} </DemoSelectWrapper>
Код DemoMultipleSelectWrapperconst searchItems = (items: ItemType[], query: string): ItemType[] => {if (!query) {return items;}const queryString = query.toLowerCase();return items.filter(item => item.title?.toLowerCase().includes(queryString));};const DemoMultipleSelectWrapper: React.FC<ISelectWrapperProps> = ({ children }) => {const [currentItems, setCurrentItems] = React.useState<ItemType[]>(items);const [selectedItems, setSelectedItems] = React.useState<ItemType[]>([]);const handleSearch = React.useCallback((query: string) => {const matchesItems = searchItems(items, query);setCurrentItems(matchesItems);},[],);const handleSelect = React.useCallback((items: ItemType[]) => {setSelectedItems(items);},[],);return (<div style={selectWrapperStyle}>{children({onSelect: handleSelect,onSearch: handleSearch,items: currentItems,selectedItems,})}</div>);};
| Prop name | Type | Default | Description |
|---|---|---|---|
| className | string | undefined | Дополнительный класс корневого элемента | |
| items* | ItemType[] | Элементы выпадающего списка | |
| selectedItems | ItemType[] | undefined | [] | Список выбранных элементов |
| selectLimit | number | undefined | Ограничение количества выбранных элементов | |
| placeholder | string | undefined | Текст внутри поля по умолчанию | |
| maxLength | number | undefined | Максимальное вводимое количество символов | |
| notFoundText | string | undefined | Ничего не нашлось | Текст при отсутствии результатов поиска |
| noticeText | string | undefined | Дополнительный текст под полем | |
| disabled | boolean | undefined | false | Отключенное состояние |
| customSearchFilter | ((item: ItemType, searchQuery: string) => boolean) | undefined | Пользовательская функция поиска | |
| onSelect | ((items: ItemType[]) => void) | undefined | Обработчик выбора элемента селекта | |
| onBlur | ((e: FocusEvent<HTMLInputElement, Element>) => void) | undefined | Обработчик выхода из фокуса | |
| onFocus | ((e: FocusEvent<HTMLInputElement, Element>) => void) | undefined | Обработчик входа в фокус | |
| onSearch | ((query: string) => void) | undefined | Обработчик изменения поля при поиске | |
| searchDelay | number | undefined | Использование функции debounce для onSearch | |
| isControlled | boolean | undefined | Переводит компонент в контролируемое состояние | |
| classes | { root?: string | undefined; input?: string | undefined; list?: string | undefined; listItem?: string | undefined; tag?: string | undefined; tagButton?: string | undefined; } | undefined | {} | Дополнительные классы для внутренних элементов |
| dataAttrs | { root?: Record<string, string> | undefined; input?: Record<string, string> | undefined; list?: Record<string, string> | undefined; listItem?: Record<string, string> | undefined; tag?: Record<...> | undefined; tagButton?: Record<...> | undefined; } | undefined | Дополнительные data атрибуты к внутренним элементам |