Quick Filter
Add a single search box that filters every column at once — matching the text you see on screen. Type to narrow the rows; it works together with sorting and column filters.
Searching every column
One box, every column. Type Cairo, then Engineering, then $120,000 — all three match, because the search reads the text the cell renders.
Searching only some columns
The same rows, with the search restricted to Name and City. Cairo still matches. Engineering no longer does — the Department column is outside the search.
There is no quickFilter.columns option
The subset is the third argument of quickFilterPredicate, so it exists exactly where
you call that predicate: inside a client-side data source, as above. Know the
limits before you plan around it.
-
There is no
quickFilter.columnsconfig property. Narrowing is a call argument, not a setting on the grid. -
filterApplyMode: 'client'does not take it either. In that mode the grid calls the predicate for you and searches every column — pass your own predicate from a data source when you need a subset. -
A server-side source never runs the predicate at all. It receives
params.quickFilteras plain text and decides for itself which columns the query searches.
Keep the two ends agreed. If your API searches three columns while the grid's box says it searches two, the difference surfaces as rows the user cannot explain.
Turn it on with one line
Set config.quickFilter: true to add a search box to the grid toolbar. Type in it and
the grid keeps only the rows that match your text — across every column at once.
No per-column setup, no options array.
readonly config: GridConfig<Person> = {
quickFilter: true,
};
It searches what you see
The search matches the formatted, on-screen text — the same value shown in the cell.
So searching $120,000 matches the Salary column even though the raw
data is a number, and Jan 2021 matches the Hired column even though the
raw value is an ISO date. Type several words and every word must appear somewhere in the row.
Works together with everything
Quick filter composes with the rest of the grid. This demo lets you sort any column and filter Department with its own column filter — the search box narrows the rows first, and sorting plus the column filter apply on top of what's left. Use all three together and they all stack.
Let the grid filter for you
By default the grid sends the search text (and any column filters) to your data source, which does the
filtering. If your rows are already in memory, set filterApplyMode: 'client' and the grid
filters them for you — return the full list from your source and drop the filtering
code entirely. It mirrors sortMode: 'client'.
readonly config: GridConfig<Person> = {
quickFilter: true,
filterApplyMode: 'client', // grid filters the loaded rows in memory
};
In this mode a row edited live so it no longer matches the search disappears on its own, and one edited to start matching appears — no refetch. Available with infinite scroll; paging, tree data, and lazily-loaded groups keep filtering on your data source instead.
Fine-tuning
Pass an object instead of true to adjust the box:
placeholder— the hint text inside the box. Default'Search…'.debounceMs— how long to wait after you stop typing before filtering. Default250.
readonly config: GridConfig<Person> = {
quickFilter: {
placeholder: 'Search people…',
debounceMs: 300,
},
};
Client-side sources filter the loaded array with the
quickFilterPredicate(text, columns) helper. Server-side sources receive the text as a
plain string on params.quickFilter — forward it to your API and search the full dataset.
Quick filter API
| Property | Type | Default | Description |
|---|---|---|---|
| config.quickFilter | boolean | QuickFilterConfig | false | Enable the toolbar search box. true for defaults, or an object to configure it. |
| quickFilter.placeholder | string | 'Search…' | Placeholder text shown inside the search box. |
| quickFilter.debounceMs | number | 250 | Delay after the last keystroke before the grid (re)filters or refetches. |
| config.filterApplyMode | 'client' | 'server' | 'server' | Where filtering runs. 'server' forwards filters to your data source. 'client' filters the loaded rows in memory (return the full set) and re-evaluates live edits automatically. Infinite scroll only — paging, tree data, and lazily-loaded groups fall back to server filtering. Mirrors sortMode. |
| params.quickFilter | string | — | The search text delivered to your data source — forward it to a server API. |
| quickFilterPredicate(text, columns, only?) | (row: T) => boolean | — | Library helper — builds a row predicate that matches the formatted cell text for in-memory sources. only is a list of column keys to search; omit it for every column. Client-side callers only — there is no config equivalent. |