Data table filter - TanStack Table (add-on)
bazza-ui/data-table-filter-tstFreeBlock
An add-on for the data table filter component to provide TanStack Table client-side filtering integration.
Install it
npx shadcn@latest add https://bazza-ui.com/r/data-table-filter-tst.jsonSource
1import type { ColumnDef, ColumnFiltersState } from '@tanstack/react-table'2import type { Column, FilterModel, FiltersState } from '../../core/types'3import { multiOptionFilterFn, optionFilterFn } from '../../lib/filter-fns'4import {5 isColumnOption,6 isColumnOptionArray,7 isStringArray,8} from '../../lib/helpers'9import { dateFilterFn, numberFilterFn, textFilterFn } from './filter-fns'1011interface CreateTSTColumns<TData> {12 columns: ColumnDef<TData, any>[]13 configs: Column<TData>[]14}1516export function createTSTColumns<TData>({17 columns,18 configs,19}: CreateTSTColumns<TData>) {20 const _cols: ColumnDef<TData>[] = []2122 for (const col of columns) {23 // Get the column filter config for this column24 const config = configs.find((c) => c.id === col.id)2526 // If the column is not filterable or doesn't have a filter config, skip it27 // An explicit check is done on `enableColumnFilter`28 if (col.enableColumnFilter === false || !config) {29 _cols.push(col)30 continue31 }3233 if (config.type === 'text') {34 col.filterFn = textFilterFn35 _cols.push(col)36 continue37 }3839 if (config.type === 'number') {40 col.filterFn = numberFilterFn41 _cols.push(col)42 continue43 }4445 if (config.type === 'date') {46 col.filterFn = dateFilterFn47 _cols.push(col)48 continue49 }5051 if (config.type === 'option') {52 col.filterFn = (row, columnId, filterValue: FilterModel<'option'>) => {53 const value = row.getValue<unknown>(columnId)5455 if (!value) return false5657 if (typeof value === 'string') {58 return optionFilterFn(value, filterValue)59 }6061 if (isColumnOption(value)) {62 return optionFilterFn(value.value, filterValue)63 }6465 const sanitizedValue = config.transformOptionFn!(value as never)66 return optionFilterFn(sanitizedValue.value, filterValue)67 }68 }6970 if (config.type === 'multiOption') {71 col.filterFn = (72 row,73 columnId,74 filterValue: FilterModel<'multiOption'>,75 ) => {76 const value = row.getValue(columnId)7778 if (!value) return false7980 if (isStringArray(value)) {81 return multiOptionFilterFn(value, filterValue)82 }8384 if (isColumnOptionArray(value)) {85 return multiOptionFilterFn(86 value.map((v) => v.value),87 filterValue,88 )89 }9091 const sanitizedValue = (value as never[]).map((v) =>92// … truncated
Files it writes
More from bazza/ui
All 3 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Data table filterdata-table-filter | bazza/ui | Blocks | Free | 1 dep · 22 files | |
| Data table filter - i18n (add-on)data-table-filter-i18n | bazza/ui | Blocks | Free | 1 dep · 7 files |
