Filtering

Filter rows with column filters, quick filters, and backend exports.

Enable filtering on columns, then use grid.filter.

Column Setup

columns.ts
const columns: ColumnDef[] = [
{ field: 'name', header: 'Name', width: 220, filterable: true },
{ field: 'age', header: 'Age', width: 100, filterable: true },
{ field: 'email', header: 'Email', width: 260, filterable: true },
{ field: 'status', header: 'Status', width: 140, filterable: true },
];

API

filtering.ts
grid.filter.set(0, 'contains', 'John');
grid.filter.set(3, 'in', ['active', 'pending']);
grid.filter.setColumn(
1,
[
{ operator: 'greaterThan', value: 18 },
{ operator: 'lessThan', value: 65 },
],
'AND'
);
grid.filter.setQuick('john', [0, 2]);
grid.filter.clearQuick();
grid.filter.clear();

Events

filter-events.ts
grid.on('filter:beforeFilter', ({ filterState }) => {
console.log(filterState);
});
grid.on('filter:change', ({ filterState, previousFilterState }) => {
console.log({ filterState, previousFilterState });
});
grid.on('filter:afterFilter', ({ rowsVisible, rowsHidden }) => {
console.log({ rowsVisible, rowsHidden });
});

Exports

filter-exports.ts
const exports = grid.filter.getExports();
if (exports) {
console.log(exports.rest);
console.log(exports.graphql);
console.log(exports.sql);
}

Backend Filtering

backend-filtering.ts
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) => fetchRows(request),
});
Warning

Filter exports and request queries must still be validated server-side.