В Carbon Components Svelte кастомные фильтры
представляют собой механизм динамической фильтрации данных в таблицах,
списках и коллекциях компонентов. Они позволяют расширить стандартный
функционал и реализовать фильтрацию под специфические требования
приложения. Основная идея заключается в создании логики фильтрации на
уровне Svelte-компонентов и интеграции её с компонентами Carbon, такими
как DataTable и List.
Кастомный фильтр реализуется через функцию фильтрации, которая принимает набор данных и возвращает их в отфильтрованном виде. Простейший пример:
function customFilter(items, query) {
return items.filter(item => item.name.toLowerCase().includes(query.toLowerCase()));
}
Здесь items — массив объектов, а query —
строка поиска. Важно, чтобы функция была чистой, не
изменяла исходные данные, а возвращала новый массив.
Для подключения кастомного фильтра к DataTable
необходимо:
Имя
Роль
{#each filteredRows as row}
{row.name}
{row.role}
{/each}
Для более сложных случаев можно комбинировать несколько фильтров:
function advancedFilter(items, filters) {
return items.filter(item =>
(!filters.name || item.name.toLowerCase().includes(filters.name.toLowerCase())) &&
(!filters.role || item.role.toLowerCase() === filters.role.toLowerCase())
);
}
Использование:
let filters = { name: '', role: '' };
$: filteredRows = advancedFilter(rows, filters);
$: для реактивности —
позволяет автоматически обновлять отображаемый массив при изменении
фильтра.Для компонент типа List или MultiSelect
можно использовать кастомные фильтры так же, как и с таблицей:
{#each filteredItems as item}
{item}
{/each}
Search или
TextInput, обеспечивает единый визуальный стиль.Кастомные фильтры могут поддерживать:
Пример фильтра по диапазону:
function rangeFilter(items, min, max) {
return items.filter(item => item.value >= min && item.value <= max);
}
derived store в Svelte для минимизации перерендеринга.