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

RangeFilter

Компонент RangeFilter — это адаптивный фильтр по числовому диапазону для колонок таблицы. На странице «Orders History» используется для фильтрации заказов по сумме. На мобильных устройствах открывается как нижняя шторка, на десктопах — как выпадающая панель.

Обзор

  • Основное назначение: фильтрация числовых значений колонки таблицы по одному значению или диапазону.
  • Ключевые возможности:
    • Операторы: equals, notEquals, gt, gte, lt, lte, between.
    • Два поля ввода: Value/Min и Max (второе только для between).
    • Кастомные иконки для кнопки-триггера и префиксов полей ввода.
    • Динамический текст кнопки через функцию buttonText.
    • Адаптивный интерфейс через ResponsiveFilter.
    • Кнопка очистки фильтра.
    • Автофокус на первое поле при открытии.

API компонента

Props

ПропТипПо умолчаниюОписание
columnObjectОбъект колонки TanStack Table. Должен содержать getFilterValue() и setFilterValue().
titleStringЗаголовок фильтра (отображается в кнопке и панели).
IconObject | FunctionКомпонент иконки для кнопки-триггера.
MinPrefixIconObject | FunctionКомпонент иконки-префикса для поля Value/Min.
MaxPrefixIconObject | FunctionКомпонент иконки-префикса для поля Max.
buttonTextFunction({ min, max }) => ...Функция для формирования текста кнопки. Принимает объект { min, max }.

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

<script>
    <RangeFilter
        :column="table.getColumn('total')"
        title="Total Amount"
        :button-text="({ min, max }) => 
            `${min ? 'From ' + min : ''}${min && max ? ' - ' : ''}${max ? 'To ' + max : ''}`
        "
    />
</script>

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

<script>
    columnHelper.accessor('total', {
        header: 'Total',
        filterFn: (row, columnId, filterValue) => {
            if (!filterValue) return true;
            const { op, min, max } = filterValue;
            const value = row.getValue(columnId);
            const minN = min !== '' && min !== undefined ? Number(min) : null;
            const maxN = max !== '' && max !== undefined ? Number(max) : null;
        
            switch (op) {
                case 'equals':    return minN !== null && value === minN;
                case 'notEquals': return minN !== null && value !== minN;
                case 'gt':        return minN !== null && value > minN;
                case 'gte':       return minN !== null && value >= minN;
                case 'lt':        return minN !== null && value < minN;
                case 'lte':       return minN !== null && value <= minN;
                case 'between':
                    if (minN !== null && value < minN) return false;
                    if (maxN !== null && value > maxN) return false;
                    return true;
                default:          
                    return true;
            }
        },
        cell: ({ getValue }) =>
            h('p', { 
              class: 'text-sm-plus font-medium text-gray-800 dark:text-dark-100' 
            }, `$${getValue().toFixed(1)}`),
    }),
</script>

Ячейка с форматированием суммы

<script>
    cell: ({ getValue }) =>
        h('p', { 
            class: 'text-sm-plus font-medium text-gray-800 dark:text-dark-100' 
        }, `$${getValue().toFixed(1)}`),
</script>
Prev
RadioFilter
Next
ResponsiveFilter