You can access and set the models for filters through the grid API, or access individual filter instances directly for more control. This page details how to do both.
Get / Set All Filter Models
It is possible to get the state of all filters using the grid API method getFilterModel()
, and to set the state using setFilterModel()
. These methods manage the filters states via the getModel()
and setModel()
methods of the individual filters.
Gets the current state of all the column filters. Used for saving filter state. |
Sets the state of all the column filters. Provide it with what you get from getFilterModel() to restore filter state.
If inferring cell data types, and row data is initially empty or yet to be set,
the filter model will be applied asynchronously after row data is added.
To always perform this synchronously, set cellDataType = false on the default column definition,
or provide cell data types for every column. |
// Gets filter model via the grid API
const model = gridApi.getFilterModel();
// Sets the filter model via the grid API
gridApi.setFilterModel(model);
The filter model represents the state of filters for all columns and has the following structure:
// Sample filter model via getFilterModel()
{
athlete: {
filterType: 'text',
type: 'startsWith',
filter: 'mich'
},
age: {
filterType: 'number',
type: 'lessThan',
filter: 30
}
}
This is useful if you want to save the global filter state and apply it at a later stage. It is also useful for server-side filtering, where you want to pass the filter state to the server.
Reset All Filters
You can reset all filters by doing the following:
gridApi.setFilterModel(null);
Example: Get / Set All Filter Models
The example below shows getting and setting all the filter models in action.
Save Filter Model
saves the current filter state, which will then be displayed.Restore Saved Filter Model
restores the saved filter state back into the grid.Set Custom Filter Model
takes a custom hard-coded filter model and applies it to the grid.Reset Filters
will clear all active filters.Destroy Filter
destroys the filter for the Athlete column by callinggridApi.destroyFilter('athlete')
. This removes any active filter from that column, and will cause the filter to be created with new initialisation values the next time it is interacted with.
(Note: the example uses the Enterprise-only Set Filter).
Get / Set Individual Filter Model
It is also possible to get or set the filter model for a specific filter, including your own custom filters.
Gets the current filter model for the specified column.
Will return null if no active filter. |
Sets the filter model for the specified column.
Setting a model of null will reset the filter (make inactive).
Must wait on the response before calling api.onFilterChanged() . |
Re-running Grid Filtering
After filters have been changed via their API, you must ensure the method gridApi.onFilterChanged()
is called to tell the grid to filter the rows again. If gridApi.onFilterChanged()
is not called, the grid will still show the data relevant to the filters before they were updated through the API.
// Set a filter model
await api.setColumnFilterModel('name', {
filterType: 'text',
type: 'startsWith',
filter: 'abc',
});
// Tell grid to run filter operation again
api.onFilterChanged();
Reset Individual Filters
You can reset a filter to its original state by setting the model to null
.
// Set the model to null
await api.setColumnFilterModel('name', null);
// Tell grid to run filter operation again
api.onFilterChanged();
Example: Get / Set Individual Filter Model
The example below shows getting and setting an individual filter model in action.
Save Filter Model
saves the Athlete filter state, which will then be displayed.Restore Saved Filter Model
restores the saved Athlete filter state back into the grid.Set Custom Filter Model
takes a custom hard-coded Athlete filter model and applies it to the grid.Reset Filter
will clear the Athlete filter.
Accessing Individual Filter Component Instances
It is also possible to access the filter components directly if you want to interact with a specific filter. This also works for your own custom filters, where you can get a reference to the underlying filtering instance (i.e. what was created when AG Grid called new
on your filter). Calling api.getColumnFilterInstance(colKey)
will return a reference to the filter instance for the column with key colKey
.
Returns the filter component instance for a column.
For getting/setting models for individual column filters, use getColumnFilterModel and setColumnFilterModel instead of this.
key can be a column ID or a Column object. |
// Get a reference to the 'name' filter instance
const filterInstance = await api.getColumnFilterInstance('name');
All of the methods of the filter are available on the instance. If using a custom filter, any other methods you have added will also be present, allowing bespoke behaviour to be added to your filter. Both provided and custom filters implement IFilter
and have the following common methods:
Returns true if the filter is currently active, otherwise false . If active then 1) the grid will show the filter icon in the column header and 2) the filter will be included in the filtering of the data.
|
Returns a model representing the current state of the filter, or null if the filter is not active. The grid calls getModel() on all active filters when gridApi.getFilterModel() is called.
|
Sets the state of the filter using the supplied model. Providing null as the model will de-activate the filter.
|
Note that if you call setModel
on the filter, you will also need to call onFilterChanged
to re-run filtering, similar to Re-running Grid Filtering
Example: Accessing Individual Filters
The example below shows how you can interact with an individual filter instance, using the Set Filter as an example.
Get Mini Filter Text
will print the text from the Set Filter's Mini Filter to the console.Save Mini Filter Text
will save the Mini Filter text.Restore Mini Filter Text
will restore the Mini Filter text from the saved state.
(Note: the example uses the Enterprise-only Set Filter).
Read-only Filter UI
Sometimes it maybe useful to strictly control the filters used by the grid via API, whilst still exposing filter settings in-use to users. The readOnly
filter parameter changes the behaviour of all provided column filters so their UI is read-only. In this mode, API filter changes are still honoured and reflected in the UI:
const [columnDefs, setColumnDefs] = useState([
{
field: 'age',
filter: true,
filterParams: {
readOnly: true
}
}
]);
<AgGridReact columnDefs={columnDefs} />
The following example demonstrates all of the Provided Filters with readOnly: true
enabled:
- Simple Filters have a read-only display with no buttons; if there is no 2nd condition set then the join operator and 2nd condition are hidden:
athlete
column demonstrates Text Filter.age
andyear
columns demonstrate Number Filter.date
column demonstrates Date Filter.
- Set Filter allows Mini Filter searching of values, but value inclusion/exclusion cannot be toggled; buttons are also hidden, and pressing enter in the Mini Filter input has no effect:
country
,gold
,silver
andbronze
columns demonstrate Set Filter.
- Multi Filter has no direct behaviour change, sub-filters need to be individually made read-only.
readOnly: true
is needed to affect any associated Floating Filters.sport
column demonstrates Multi Filter.
- Floating Filters are enabled and inherit
readOnly: true
from their parent, disabling any UI input. - Buttons above the grid provide API interactions to configure the filters.
Launching Filters
How filters are launched can be customised (unless grid option columnMenu = 'legacy'
.
colDef.suppressHeaderFilterButton = true
can be used to disable the button in the header that opens the filter.
The filter can also be launched via api.showColumnFilter(columnKey)
.
The following example demonstrates launching the filter:
- The Athlete column has a filter button in the header to launch the filter.
- The Age column has a floating filter, so the header button is automatically hidden.
- The Country column has the filter button hidden via
colDef.suppressHeaderFilterButton
. The filter can still be opened via the API by clicking theOpen Country Filter
button. - The Year column has a floating filter and the header button is also suppressed, so has a slightly different display style when the filter is active.
Filter Events
Filtering causes the following events to be emitted:
Filter has been opened. |
Filter has been modified and applied. |
Filter was modified but not applied. Used when filters have 'Apply' buttons. |
Next Up
Continue to the next section to learn about Custom Column Filters.