Filters.List
Фильтр по списку значений — автор, статус, связанная запись. Варианты рисуются ячейками Cell: label — заголовок (и подпись на теге), description — описание под ним, avatar — аватар слева.
По умолчанию выбирают несколько вариантов — в value уходит { op: "in", value: string[] }. Пустой выбор снимает условие целиком: пустого in в value не бывает.
Тег показывает первый выбранный вариант и число остальных: «Автор: Иван +2». Подписи выбранных вариантов фильтр помнит сам. Если значение пришло снаружи, а варианта с ним нет в items, вместо подписи показывается количество: «Автор: 3».
Вариант с disabled: true гаснет и не выбирается — например, когда выбрано уже столько, сколько можно. Уже выбранный вариант с disabled в списке не снимается — только крестиком на теге.
Использует: Filters.Item, Search, ScrollArea, Menu, FiltersOptions
[]
Примеры
Одиночный выбор
mode="single" — радио вместо чекбоксов: выбор заменяет прежний и закрывает поповер, условие пишется оператором { op: "eq", value: string }. Снять выбор можно крестиком на теге.
[
{
"key": "status",
"op": "eq",
"value": "review"
}
]Поиск и подгрузка
С onSearch над списком появляется поле поиска: колбэк вызывается через 300 мс после ввода, а на закрытии поповера — с пустой строкой. С hasMore под списком появляется «Показать ещё» (onLoadMore); пока isLoading, пустой список показывает «Загрузка…», а кнопка подгрузки недоступна. Сами запросы делает потребитель — в items приходит уже суженный и догруженный список. onOpenChange сообщает об открытии и закрытии поповера: по нему варианты можно грузить только в открытом.
API
| Prop | Type | Default |
|---|---|---|
field*Поле фильтра — ключ его условия в value у Filters.Root | string | - |
label*Название фильтра на теге | string | - |
modeСколько вариантов можно выбрать. multiple пишет условие
| "single" | "multiple" | "multiple" |
items*Варианты списка. Запросы делает потребитель: список приходит готовым, уже суженным поиском и догруженным по onLoadMore | FiltersListItem[] | - |
isLoadingИдёт загрузка вариантов: пустой список показывает «Загрузка…», а кнопка «Показать ещё» недоступна | boolean | false |
onSearchПоиск по вариантам: с ним над списком появляется поле поиска. Вызывается через 300 мс после ввода, а на закрытии поповера — с пустой строкой | (search: string) => void | - |
hasMoreЕсть ещё варианты — под списком появляется «Показать ещё» | boolean | false |
onLoadMoreКлик по «Показать ещё» | () => void | - |
onOpenChangeВызывается на открытие и закрытие поповера, включая Esc и клик вне его, — например, чтобы грузить варианты только в открытом | (open: boolean) => void | - |
emptyTextТекст пустого списка | string | "Ничего не найдено" |