Filter Plugin
Use ZenGrid filtering through the public grid.filter API.
The filter plugin is installed automatically by Grid. Application code should use grid.filter.
Public API
grid.filter.set(1, 'contains', 'Alice');grid.filter.setColumn( 2, [ { operator: 'greaterThan', value: 18 }, { operator: 'lessThan', value: 65 }, ], 'AND');grid.filter.setQuick('engineering');grid.filter.clearColumn(1);grid.filter.clearQuick();grid.filter.clear();
const state = grid.filter.getState();const quick = grid.filter.getQuick();const exports = grid.filter.getExports();Column Setup
import type { ColumnDef } from '@zengrid/core';
const columns: ColumnDef[] = [ { field: 'name', header: 'Name', width: 220, filterable: true }, { field: 'department', header: 'Department', width: 180, filterable: true }, { field: 'status', header: 'Status', width: 140, filterable: true },];Events
grid.on('filter:change', ({ filterState, previousFilterState }) => { console.log({ filterState, previousFilterState });});
grid.on('filter:export', ({ rest, graphql, sql }) => { console.log(rest, graphql, sql);});Backend Mode
When dataMode: 'backend', filter state is delegated through onDataRequest.
const grid = new Grid(container, { columns, rowCount: 100000, colCount: columns.length, rowHeight: 36, colWidth: columns.map((column) => column.width ?? 140), dataMode: 'backend', onDataRequest: async (request) => { const response = await fetch('/api/search', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(request.query), signal: request.signal, });
return response.json(); },}); ⚠ Warning
Validate filter input on the server. Client-side filter exports are a transport format, not a security boundary.