BMC IO DocsBMC IO Docs
IO v6
IO v7
Notes
Docs
IO v6
IO v7
Notes
Docs
  • IO Framework v7

    • О фреймворке
    • Что изменилось в 7 версии
    • Структура
    • Доступ к участкам проекта
    • Разворачивание нового проекта
  • Backend

    • Настройки проекта Conf.php
    • Настройки модуля Module.php
    • Настройки composer
    • Функции фреймворка
    • Глобальные переменные
    • Константы фреймворка
    • Event класс
    • Core класс
    • Route и работа с ними
    • Request и работа с ними
    • Middleware и работа с ними
    • Class и работа с ними
    • Api model и работа с ними
    • Template и работа с ними
    • Мультиязычность и словарь фраз
    • Bin скрипты и работа с ними
    • Cron скрипты и работа с ними
    • $ioSession и работа с сессией
    • $ioHash и работа с кешем
    • $ioXCache и работа с кешем
    • $iodb и работа с базой данных
  • Frontend

    • Twig шаблонизатор и работа с ним
    • Twig функции
    • Twig фильтры
    • Twig контекст
    • Настройка NPM
    • Сборка Frontend составляющей
    • Обращение к Api через JS
    • Хранилище (store)
    • Навигация в хосте
    • Навигация в микрофронтенде
    • Параметры микрофронтенда
    • Проверка полномочий
  • Tailux UI Компоненты

    • Базовый UI

      • AvatarDot
      • Avatar
      • Badge
      • Button
      • Card
      • ConfirmModal
      • Divider
      • Highlight
      • Tag
    • Загрузка

      • Circlebar
      • Progress
      • Skeleton
      • Spinner
    • Навигация

      • Accordion
      • AccordionButton
      • AccordionHeader
      • AccordionItem
      • AccordionPanel
      • AccordionProvider
      • Pagination
      • PaginationControl
      • PaginationItems
      • PaginationDots
      • PaginationFirst
      • PaginationLast
      • PaginationNext
      • PaginationPrevious
    • Отображение данных

      • Box
      • Collapse
      • ContextualHelp
      • ScrollShadow
      • Timeline
      • TimelineItem
    • Элементы таблиц

      • Table
      • CollapsibleSearch
      • ColumnFilter
      • CopyableCell
      • DateFilter
      • FacetedFilter
      • FilterSelector
      • PaginationSection
      • RadioFilter
      • RangeFilter
      • ResponsiveFilter
      • RoleFilter
      • SelectedRowsActions
      • TableColumnVisibility
      • TableSettings
      • TableSortIcon
    • Элементы форм

      • Checkbox
      • Combobox
      • DatePicker
      • Filepond
      • Input
      • Listbox
      • Radio
      • Range
      • Select
      • StyledSwitch
      • Swap
      • SwapOn
      • SwapOff
      • Switch
      • Textarea
      • TextEditor
      • Upload

FacetedFilter

Компонент FacetedFilter — это адаптивный фильтр с фасетами (количеством записей) для колонок таблицы. Отображает выпадающий список с поиском, чекбоксами и счётчиками совпадений. На мобильных устройствах открывается как нижняя шторка, на десктопах — как выпадающая панель.

Обзор

  • Основное назначение: фильтрация колонки таблицы по одному или нескольким значениям с отображением частоты встречаемости.
  • Ключевые возможности:
    • Поиск по списку опций.
    • Множественный выбор значений с чекбоксами.
    • Отображение количества записей для каждого значения (facets).
    • Выбор оператора: equals, notEquals.
    • Отображение выбранных значений в кнопке-триггере.
    • Адаптивный интерфейс через ResponsiveFilter.
    • Кнопка очистки фильтра.

API компонента

Props

ПропТипПо умолчаниюОписание
columnObjectОбъект колонки TanStack Table. Должен содержать getFilterValue(), setFilterValue(), getFacetedUniqueValues().
titleStringЗаголовок фильтра (отображается в кнопке и плейсхолдере поиска).
optionsArray[]Массив опций для фильтрации. Каждый элемент должен содержать поля, указанные в labelField и valueField.
labelFieldString'label'Ключ поля с отображаемым текстом опции.
valueFieldString'value'Ключ поля со значением опции.
showCheckboxBooleantrueПоказывать чекбоксы рядом с опциями.

Базовое использование

<FacetedFilter 
    :column="table.getColumn('order_status')" 
    title="Status" 
    :options="statusOptions" 
/>

Где statusOptions определён в data()

<script>
    data() {
        return {
            statusOptions: orderStatusOptions.map(s => ({ 
                label: s.label, 
                value: s.value 
            })),
        };
    }
</script>

Исходные данные статусов

<script>
    export const orderStatusOptions = [
        { label: 'Pending', value: 'pending', color: 'info' },
        { label: 'Processing', value: 'processing', color: 'warning' },
        { label: 'Shipped', value: 'shipped', color: 'success' },
        { label: 'Delivered', value: 'delivered', color: 'primary' },
        { label: 'Cancelled', value: 'cancelled', color: 'error' },
    ];
</script>

Функция фильтрации в колонке

<script>
    columnHelper.accessor('order_status', {
        header: 'Status',
        filterFn: (row, columnId, filterValue) => {
            if (!filterValue) return true;
            const { op, values } = filterValue;
            const cell = row.getValue(columnId);
            
            if (op === 'empty')    return !cell;
            if (op === 'notEmpty') return !!cell;
            if (!values?.length)   return true;
            
            switch (op) {
                case 'equals':    return values.includes(cell);
                case 'notEquals': return !values.includes(cell);
                default:          return values.includes(cell);
            }
        },
        cell: ({ getValue }) => {
            const status = orderStatusOptions.find(s => s.value === getValue());
            const cls = colorMap[status?.color] ?? 'bg-gray-100 text-gray-700';
            return h('span', { 
                class: `rounded-full px-2 py-1 text-xs font-medium ${cls}` 
            }, status?.label ?? getValue());
        },
    }),
</script>
Prev
DateFilter
Next
FilterSelector