Filtering

Filter rows with per-column filters and/or a global search across all columns.

How to Enable

Filtering is enabled by default. Use setColumnFilters or setGlobalFilter to apply filters.

Table Options

OptionTypeDefaultDescription
enableFiltersbooleantrueEnable/disable all filtering
enableColumnFiltersbooleantrueEnable per-column filters
enableGlobalFilterbooleantrueEnable global search
manualFilteringbooleanfalseHandle filtering externally (server-side)
globalFilterFnFilterFnOption--Custom global filter function
onColumnFiltersChangeOnChangeFn<ColumnFiltersState>--Callback when column filters change
onGlobalFilterChangeOnChangeFn<string>--Callback when global filter changes

Column Options

OptionTypeDefaultDescription
enableColumnFilterbooleantrueEnable filtering for this column
enableGlobalFilterbooleantrueInclude this column in global search
filterFnFilterFnOption--Filter function name or custom function

Built-in Filter Functions

NameDescription
includesStringCase-insensitive substring match
includesStringSensitiveCase-sensitive substring match
equalsStringCase-insensitive exact string match
equalsStringSensitiveCase-sensitive exact string match
arrIncludesArray contains value
arrIncludesAllArray contains all values
arrIncludesSomeArray contains at least one value
equalsStrict equality (===)
weakEqualsLoose equality (==)
inNumberRangeNumber within [min, max] range
inDateRangeDate within [start, end] range

Examples

// Column filter -- show only "Engineering" department
table.setColumnFilters([{ id: 'department', value: 'Engineering' }])

// Multiple column filters
table.setColumnFilters([
  { id: 'department', value: 'Engineering' },
  { id: 'salary', value: [100000, 150000] }, // with inNumberRange filter
])

// Global filter -- search across all columns
table.setGlobalFilter('alice')

// Clear all filters
table.resetColumnFilters(true)
table.resetGlobalFilter(true)

Custom Filter Function

columnHelper.accessor('tags', {
  header: 'Tags',
  filterFn: (row, columnId, filterValue) => {
    const tags = row.getValue<string[]>(columnId)
    return tags.some((tag) => tag.toLowerCase().includes(String(filterValue).toLowerCase()))
  },
})

React: GlobalFilter Component

import { GlobalFilter } from '@zvndev/yable-react'

<GlobalFilter
  table={table}
  placeholder="Search..."
  debounce={300}  // ms delay before applying filter
/>