# Filter Technical Reference

Canonical page: https://www.adaptabletools.com/docs/technical-reference-filter

---

## Filter Options

| Property | Type | Description | Default |
| --- | --- | --- | --- |
| [clearFiltersOnStartUp](https://www.adaptabletools.com/docs/reference/filteroptions.md#clearfiltersonstartup) | `boolean` | Clear Grid and Column Filters when AdapTable loads | false |
| [columnFilterOptions](https://www.adaptabletools.com/docs/reference/filteroptions.md#columnfilteroptions) | [`ColumnFilterOptions`](https://www.adaptabletools.com/docs/reference/columnfilteroptions.md) | The filter row under the column headers, and the operator offered first for each data type. |   |
| [customInFilterValues](https://www.adaptabletools.com/docs/reference/filteroptions.md#custominfiltervalues) | `(context: `[`CustomInFilterValuesContext`](https://www.adaptabletools.com/docs/reference/custominfiltervaluescontext.md)`<TData>) => Promise<`[`InFilterValueResult`](https://www.adaptabletools.com/docs/reference/infiltervalueresult.md)`> \| `[`InFilterValueResult`](https://www.adaptabletools.com/docs/reference/infiltervalueresult.md) | Provide custom values (or sorting / count info) when using the `IN` operator in Column or Grid Filter |   |
| [enableFilterOnSpecialColumns](https://www.adaptabletools.com/docs/reference/filteroptions.md#enablefilteronspecialcolumns) | `boolean` | Allow filtering on Calculated &amp; FreeText columns | true |
| [isRowFilterable](https://www.adaptabletools.com/docs/reference/filteroptions.md#isrowfilterable) | `(context: `[`IsRowFilterableContext`](https://www.adaptabletools.com/docs/reference/isrowfilterablecontext.md)`) => boolean` | Configures whether Rows will be evaluated when filtering |   |
| [showDatePicker](https://www.adaptabletools.com/docs/reference/filteroptions.md#showdatepicker) | `boolean` | Show Date Picker (or Date Input) in Filter controls | true |
| [useAdaptableFiltering](https://www.adaptabletools.com/docs/reference/filteroptions.md#useadaptablefiltering) | `boolean` | Use Adaptable&#39;s Column &amp; Grid Filters in preference to AG Grid&#39;s filtering | true |

### Column Filter Options

| Property | Type | Description | Default |
| --- | --- | --- | --- |
| [defaultArrayColumnFilter](https://www.adaptabletools.com/docs/reference/columnfilteroptions.md#defaultarraycolumnfilter) | [`DefaultArrayColumnFilter`](https://www.adaptabletools.com/docs/reference/defaultarraycolumnfilter.md)` \| ((adaptableColumnContext: `[`DefaultFilterExpressionContext`](https://www.adaptabletools.com/docs/reference/defaultfilterexpressioncontext.md)`) => `[`DefaultArrayColumnFilter`](https://www.adaptabletools.com/docs/reference/defaultarraycolumnfilter.md)`)` | Default filter operator for array Columns (&#39;textArray&#39;, &#39;numberArray&#39;, etc.) | IN |
| [defaultDateColumnFilter](https://www.adaptabletools.com/docs/reference/columnfilteroptions.md#defaultdatecolumnfilter) | [`DefaultDateColumnFilter`](https://www.adaptabletools.com/docs/reference/defaultdatecolumnfilter.md)` \| ((adaptableColumnContext: `[`DefaultFilterExpressionContext`](https://www.adaptabletools.com/docs/reference/defaultfilterexpressioncontext.md)`) => `[`DefaultDateColumnFilter`](https://www.adaptabletools.com/docs/reference/defaultdatecolumnfilter.md)`)` | Default filter operator for date Columns.<br/><br/>`'IS_SAME_DAY'` matches the same calendar day. Use `'EQ'` when you need<br/>exact timestamp equality. | IS_SAME_DAY |
| [defaultNumericColumnFilter](https://www.adaptabletools.com/docs/reference/columnfilteroptions.md#defaultnumericcolumnfilter) | [`DefaultNumericColumnFilter`](https://www.adaptabletools.com/docs/reference/defaultnumericcolumnfilter.md)` \| ((adaptableColumnContext: `[`DefaultFilterExpressionContext`](https://www.adaptabletools.com/docs/reference/defaultfilterexpressioncontext.md)`) => `[`DefaultNumericColumnFilter`](https://www.adaptabletools.com/docs/reference/defaultnumericcolumnfilter.md)`)` | Default filter operator for numeric Columns | EQ |
| [defaultTextColumnFilter](https://www.adaptabletools.com/docs/reference/columnfilteroptions.md#defaulttextcolumnfilter) | [`DefaultTextColumnFilter`](https://www.adaptabletools.com/docs/reference/defaulttextcolumnfilter.md)` \| ((adaptableColumnContext: `[`DefaultFilterExpressionContext`](https://www.adaptabletools.com/docs/reference/defaultfilterexpressioncontext.md)`) => `[`DefaultTextColumnFilter`](https://www.adaptabletools.com/docs/reference/defaulttextcolumnfilter.md)`)` | Default filter operator for text Columns | CONTAINS |
| [hideQuickFilterDropdown](https://www.adaptabletools.com/docs/reference/columnfilteroptions.md#hidequickfilterdropdown) | `(adaptableColumnContext: `[`AdaptableColumnContext`](https://www.adaptabletools.com/docs/reference/adaptablecolumncontext.md)`<TData>) => boolean` | Hides Dropdown in Quick Filter Bar for a given Column | undefined |
| [indicateFilteredColumns](https://www.adaptabletools.com/docs/reference/columnfilteroptions.md#indicatefilteredcolumns) | `boolean` | Make Column Header distinctive for filtered columns, helps users see currently filtered columns | true |
| [manuallyApplyColumnFilter](https://www.adaptabletools.com/docs/reference/columnfilteroptions.md#manuallyapplycolumnfilter) | `boolean \| ((context: `[`AdaptableColumnContext`](https://www.adaptabletools.com/docs/reference/adaptablecolumncontext.md)`) => boolean)` | Manually apply Column Filters; an Apply Filter button is displayed and Quick Filter is disabled | false |
| [quickFilterDebounce](https://www.adaptabletools.com/docs/reference/columnfilteroptions.md#quickfilterdebounce) | `number` | Time to wait (in ms) before Filter Bar reacts to new value | 250 |
| [quickFilterHeight](https://www.adaptabletools.com/docs/reference/columnfilteroptions.md#quickfilterheight) | `number` | Height of Quick Filter Bar (if not provided, AG Grid default is used) | null |
| [quickFilterWildcards](https://www.adaptabletools.com/docs/reference/columnfilteroptions.md#quickfilterwildcards) | `Partial<Record<`[`ColumnFilterOperator`](https://www.adaptabletools.com/docs/reference/columnfilteroperator.md)`, string[]>>` | Shortcut keystrokes that activate a Quick Filter operator, keyed by the<br/>AQL operator name (e.g. `{ GT: ['>'], IN: ['#', '['] }`). |  |
| [showQuickFilter](https://www.adaptabletools.com/docs/reference/columnfilteroptions.md#showquickfilter) | `boolean` | Display Quick Filter Bar between Column Header and Grid (provided its been setup) | true |

`defaultTextColumnFilter` is a [`DefaultTextColumnFilter`](https://www.adaptabletools.com/docs/reference/defaulttextcolumnfilter.md):

[See API: defaulttextcolumnfilter](https://www.adaptabletools.com/docs/reference/defaulttextcolumnfilter.md)

`defaultNumericColumnFilter` is a [`DefaultNumericColumnFilter`](https://www.adaptabletools.com/docs/reference/defaultnumericcolumnfilter.md):

[See API: defaultnumericcolumnfilter](https://www.adaptabletools.com/docs/reference/defaultnumericcolumnfilter.md)

`defaultDateColumnFilter` is a [`DefaultDateColumnFilter`](https://www.adaptabletools.com/docs/reference/defaultdatecolumnfilter.md):

[See API: defaultdatecolumnfilter](https://www.adaptabletools.com/docs/reference/defaultdatecolumnfilter.md)

`defaultArrayColumnFilter` is a [`DefaultArrayColumnFilter`](https://www.adaptabletools.com/docs/reference/defaultarraycolumnfilter.md):

[See API: defaultarraycolumnfilter](https://www.adaptabletools.com/docs/reference/defaultarraycolumnfilter.md)

`quickFilterWildcards` entries are a [`ColumnFilterOperator`](https://www.adaptabletools.com/docs/reference/columnfilteroperator.md):

[See API: columnfilteroperator](https://www.adaptabletools.com/docs/reference/columnfilteroperator.md)

`customInFilterValues` receives a [`CustomInFilterValuesContext`](https://www.adaptabletools.com/docs/reference/custominfiltervaluescontext.md) and returns an [`InFilterValueResult`](https://www.adaptabletools.com/docs/reference/infiltervalueresult.md):

| Property | Type | Description | Default |
| --- | --- | --- | --- |
| [currentSearchValue](https://www.adaptabletools.com/docs/reference/custominfiltervaluescontext.md#currentsearchvalue) | `string` | Current text in the IN Filter search box.<br/><br/>Useful when implementing server-side filtering of the value list. |   |
| [defaultValues](https://www.adaptabletools.com/docs/reference/custominfiltervaluescontext.md#defaultvalues) | [`ComputedInFilterValueInfo`](https://www.adaptabletools.com/docs/reference/computedinfiltervalueinfo.md)`[]` | Distinct Column values in natural (unsorted) row iteration order.<br/><br/>When the Column uses a Tree Filter, items have a hierarchical structure.<br/><br/>Computed lazily on first access. |   |
| [limit](https://www.adaptabletools.com/docs/reference/custominfiltervaluescontext.md#limit) | `number` | Suggested page size. Consumers may return fewer or more items. Useful when `hasMore` is true on the return object (lazy pagination). | 1000 |
| [offset](https://www.adaptabletools.com/docs/reference/custominfiltervaluescontext.md#offset) | `number` | Zero-based index of the first value to return.<br/>Reset to 0 when the dropdown opens or `currentSearchValue` changes.<br/>Increased when loading the next page (`hasMore` is true on the return object - this means lazy pagination is enabled). | 0 |
| [orderedValues](https://www.adaptabletools.com/docs/reference/custominfiltervaluescontext.md#orderedvalues) | [`ComputedInFilterValueInfo`](https://www.adaptabletools.com/docs/reference/computedinfiltervalueinfo.md)`[]` | Distinct Column values in the order they appear in the grid from top to bottom.<br/><br/>Always a flat list, even when the Column uses a Tree Filter.<br/><br/>Computed lazily on first access. |   |
| [previousFilterResult](https://www.adaptabletools.com/docs/reference/custominfiltervaluescontext.md#previousfilterresult) | [`InFilterValueResult`](https://www.adaptabletools.com/docs/reference/infiltervalueresult.md) | The result returned by the previous invocation of `FilterOptions.customInFilterValues`, if any.<br/><br/>Useful for avoiding expensive recomputations (e.g. when filtering is async or server-side).<br/>Opaque pagination cursors may also be stashed on this object and read on the next call. |   |
| [selectedValues](https://www.adaptabletools.com/docs/reference/custominfiltervaluescontext.md#selectedvalues) | [`InFilterValue`](https://www.adaptabletools.com/docs/reference/infiltervalue.md)`[]` | Values currently selected in the IN (or NOT IN) Column Filter.<br/><br/>Labels are resolved from previously loaded In Filter items when available.<br/><br/>Useful with lazy pagination or server-side search: selected items may not be in the current page. |   |
| [sortedValues](https://www.adaptabletools.com/docs/reference/custominfiltervaluescontext.md#sortedvalues) | [`ComputedInFilterValueInfo`](https://www.adaptabletools.com/docs/reference/computedinfiltervalueinfo.md)`[]` | Distinct Column values sorted by the Column&#39;s own sort direction (Asc / Desc).<br/><br/>If the Column has no active sort, values are returned in the same order as `defaultValues`.<br/><br/>When the Column uses a Tree Filter, items have a hierarchical structure.<br/><br/>Computed lazily on first access. |   |
| [adaptableContext](https://www.adaptabletools.com/docs/reference/custominfiltervaluescontext.md#adaptablecontext) | `any` | Custom application Context provided in `AdaptableOptions.adaptableContext` |   |

| Property | Type | Description |
| --- | --- | --- |
| [hasMore](https://www.adaptabletools.com/docs/reference/infiltervalueresult.md#hasmore) | `boolean` | When true, scrolling near the end of the list re-invokes `customInFilterValues`<br/>with a larger `offset`. New `values` are appended (same search).<br/>Search changes reset the list and set `offset` back to 0. |
| [inFilterLabel](https://www.adaptabletools.com/docs/reference/infiltervalueresult.md#infilterlabel) | `(context: `[`InFilterLabelContext`](https://www.adaptabletools.com/docs/reference/infilterlabelcontext.md)`) => string` | Custom text for the collapsed IN Filter input.<br/><br/>Receives an  and must return a string.<br/><br/>When omitted, the input shows the selected count (e.g. `(3)`) followed by the<br/>selected labels joined with a comma. When provided, it fully replaces that<br/>text (including the count - render one yourself if you want it).<br/><br/>For tree-shaped filters (group columns and date columns), each selected leaf<br/>is one entry in `selectedValues`: its `value` is the full leaf path and its<br/>`label` the joined path label. `selectedCount` is the number of selected leaves. |
| [skipDefaultSearch](https://www.adaptabletools.com/docs/reference/infiltervalueresult.md#skipdefaultsearch) | `boolean` | If true, AdapTable will not filter the list using the current search value |
| [values](https://www.adaptabletools.com/docs/reference/infiltervalueresult.md#values) | [`InFilterValue`](https://www.adaptabletools.com/docs/reference/infiltervalue.md)`[]` | List of Items to display in the IN Column Filter |

`isRowFilterable` receives an [`IsRowFilterableContext`](https://www.adaptabletools.com/docs/reference/isrowfilterablecontext.md):

| Property | Type | Description |
| --- | --- | --- |
| [data](https://www.adaptabletools.com/docs/reference/isrowfilterablecontext.md#data) | `TData` | The data in the Row Node |
| [rowNode](https://www.adaptabletools.com/docs/reference/isrowfilterablecontext.md#rownode) | `IRowNode` | The Row Node about to be evaluated |
| [adaptableContext](https://www.adaptabletools.com/docs/reference/isrowfilterablecontext.md#adaptablecontext) | `any` | Custom application Context provided in `AdaptableOptions.adaptableContext` |

See [Configuring Filters](https://www.adaptabletools.com/docs/handbook-column-filter-configuring/index.md) for how these options are used

---

## Filter State

There is no separate Filter section in Initial Adaptable State.

Column Filters and the Grid Filter are properties of a [Layout](https://www.adaptabletools.com/docs/handbook-layouts/index.md), defined in [Layout Initial State](https://www.adaptabletools.com/docs/technical-reference-layouts/index.md).

### Column Filter

| Property | Type | Description |
| --- | --- | --- |
| [ColumnId](https://www.adaptabletools.com/docs/reference/columnfilter.md#columnid) | `string` | Column where Filter should be applied |
| [Expression](https://www.adaptabletools.com/docs/reference/columnfilter.md#expression) | `string` | AdaptableQL boolean expression evaluated for each row, e.g.<br/><br/>`[price] > 100 AND [price] < 200 OR [price] = 350`<br/><br/>Mutually exclusive with : when<br/>`Expression` is set, `PreferredFilter` is not persisted. |
| [PreferredFilter](https://www.adaptabletools.com/docs/reference/columnfilter.md#preferredfilter) | `string` | Preferred filter operator when there is no `Expression` (UI seed only —<br/>does not filter rows). Uses AQL operator / function names, the same<br/>vocabulary as `columnFilterOptions.default*ColumnFilter` (e.g. `'IN'`,<br/>`'STARTS_WITH'`, `'EQ'`).<br/><br/>Mutually exclusive with : set when the<br/>user selects an operator before the filter is complete; removed as<br/>soon as a valid `Expression` is persisted; restored from the current<br/>UI operator when the `Expression` is cleared. |
| [IsReadOnly](https://www.adaptabletools.com/docs/reference/columnfilter.md#isreadonly) | `boolean` | Sets Entity to ReadOnly (overwriting a Strategy Entitlement of &#39;Full&#39;) |
| [IsSuspended](https://www.adaptabletools.com/docs/reference/columnfilter.md#issuspended) | `boolean` | Suspends (i.e. turns off) an Adaptable Object |

### Grid Filter

| Property | Type | Description |
| --- | --- | --- |
| [Expression](https://www.adaptabletools.com/docs/reference/gridfilter.md#expression) | `string` | The (boolean) Expression to run |
| [IsReadOnly](https://www.adaptabletools.com/docs/reference/gridfilter.md#isreadonly) | `boolean` | Sets Entity to ReadOnly (overwriting a Strategy Entitlement of &#39;Full&#39;) |
| [IsSuspended](https://www.adaptabletools.com/docs/reference/gridfilter.md#issuspended) | `boolean` | Suspends (i.e. turns off) an Adaptable Object |

---

## Filter API

| Property | Type | Description |
| --- | --- | --- |
| [columnFilterApi](https://www.adaptabletools.com/docs/reference/filterapi.md#columnfilterapi) | [`ColumnFilterApi`](https://www.adaptabletools.com/docs/reference/columnfilterapi.md) | API for managing Column Filters |
| [gridFilterApi](https://www.adaptabletools.com/docs/reference/filterapi.md#gridfilterapi) | [`GridFilterApi`](https://www.adaptabletools.com/docs/reference/gridfilterapi.md) | API for managing the Grid Filter |

| Method | Returns | Description |
| --- | --- | --- |
| [clearAllFilters()](https://www.adaptabletools.com/docs/reference/filterapi.md#clearallfilters) | `void` | Clears all Filters in AdapTable - both Column and Grid |

### Column Filter API

| Method | Returns | Description |
| --- | --- | --- |
| [clearAndSetColumnFilters(columnFilters)](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#clearandsetcolumnfilters) | `void` | Clears existing Column Filters and sets new ones |
| [clearColumnFilter(columnFilter)](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#clearcolumnfilter) | `void` | Clears given Column Filter in the current Layout |
| [clearColumnFilterForColumn(columnId)](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#clearcolumnfilterforcolumn) | `void` | Clears Column Filter for given Column |
| [clearColumnFilters()](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#clearcolumnfilters) | `void` | Clears all Column Filters in the Current Layout |
| [clearColumnFiltersForColumns(columns)](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#clearcolumnfiltersforcolumns) | `void` | Clears Column Filters for given set of Columns |
| [columnFiltersToString(columnFilters)](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#columnfilterstostring) | `string` | Retrieves descriptions of given Column Filters |
| [columnFilterToString(columnFilter)](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#columnfiltertostring) | `string` | Retrieves description of given Column Filter |
| [getActiveColumnFilters()](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#getactivecolumnfilters) | [`ColumnFilter`](https://www.adaptabletools.com/docs/reference/columnfilter.md)`[]` | Retrieves all active/no-suspended Column Filters in currently applied Layout |
| [getColumnFilterForColumn(columnId)](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#getcolumnfilterforcolumn) | [`ColumnFilter`](https://www.adaptabletools.com/docs/reference/columnfilter.md)` \| undefined` | Retrieves the Column Filter for the specified Column. |
| [getColumnFilters()](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#getcolumnfilters) | [`ColumnFilter`](https://www.adaptabletools.com/docs/reference/columnfilter.md)`[]` | Retrieves all Column Filters in currently applied Layout |
| [getColumnFiltersForLayout(layoutName)](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#getcolumnfiltersforlayout) | [`ColumnFilter`](https://www.adaptabletools.com/docs/reference/columnfilter.md)`[]` | Retrieves all Column Filters in a given Layout |
| [hideColumnFilterMenu()](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#hidecolumnfiltermenu) | `void` | Hides Column Filter Menu |
| [hideQuickFilterBar()](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#hidequickfilterbar) | `void` | Hides Quick Filter bar |
| [isColumnFilterActive(columnFilter)](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#iscolumnfilteractive) | `boolean` | Whether a Column Filter is filtering rows. Active when it is not suspended and its expression is not empty. |
| [isColumnFilterActiveForColumn(columnId)](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#iscolumnfilteractiveforcolumn) | `boolean` | Whether the given column has an active Column Filter |
| [isQuickFilterAvailable()](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#isquickfilteravailable) | `boolean` | Whether Quick Filter is available for use |
| [isQuickFilterVisible()](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#isquickfiltervisible) | `boolean` | Whether Quick Filter Form is currently visible |
| [refreshAllFilterValues()](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#refreshallfiltervalues) | `Promise<Record<string, `[`InFilterValueResult`](https://www.adaptabletools.com/docs/reference/infiltervalueresult.md)`>>` | Refreshes (reloads) the filter values for ALL Columns (for `IN` Filter). |
| [refreshFilterValues(columnId)](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#refreshfiltervalues) | `Promise<`[`InFilterValueResult`](https://www.adaptabletools.com/docs/reference/infiltervalueresult.md)`>` | Refresh(reload) the filter values for a given Column (for `IN` Filter). |
| [resetAllFilterValues()](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#resetallfiltervalues) | `void` | Reset(clear cache) the filter values for ALL Columns (for `IN` Filter). |
| [resetFilterValues(columnId)](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#resetfiltervalues) | `void` | Reset(clear cache) the filter values for a given Column (for `IN` Filter). |
| [setColumnFilters(columnFilters)](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#setcolumnfilters) | [`ColumnFilter`](https://www.adaptabletools.com/docs/reference/columnfilter.md)`[] \| null` | Sets Column Filters in current Layout; replaces filters for existing column, leaving other column filters in place |
| [showQuickFilterBar()](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#showquickfilterbar) | `void` | Makes Quick Filter Bar appear |
| [suspendAllColumnFilters()](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#suspendallcolumnfilters) | `void` | Suspends all Column Filters |
| [suspendColumnFilter(columnFilter)](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#suspendcolumnfilter) | `void` | Suspends a Column Filter |
| [unSuspendAllColumnFilters()](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#unsuspendallcolumnfilters) | `void` | Unsuspend all Column Filters |
| [unSuspendColumnFilter(columnFilter)](https://www.adaptabletools.com/docs/reference/columnfilterapi.md#unsuspendcolumnfilter) | `void` | Unsuspend a Column Filter |

### Grid Filter API

| Method | Returns | Description |
| --- | --- | --- |
| [clearGridFilter()](https://www.adaptabletools.com/docs/reference/gridfilterapi.md#cleargridfilter) | `void` | Clears the Grid Filter (for the current Layout) |
| [getCurrentGridFilter()](https://www.adaptabletools.com/docs/reference/gridfilterapi.md#getcurrentgridfilter) | [`GridFilter`](https://www.adaptabletools.com/docs/reference/gridfilter.md)` \| undefined` | Retrieves the Grid Filter from the current Layout |
| [getCurrentGridFilterExpression()](https://www.adaptabletools.com/docs/reference/gridfilterapi.md#getcurrentgridfilterexpression) | `string \| undefined` | Retrieves the Grid Filter&#39;s Expression from the current layout |
| [openUIEditorForGridFilter(expression)](https://www.adaptabletools.com/docs/reference/gridfilterapi.md#openuieditorforgridfilter) | `void` | Opens the Grid Filter Settings Panel (Expression Editor &amp; Query Builder). |
| [reApplyGridFilter()](https://www.adaptabletools.com/docs/reference/gridfilterapi.md#reapplygridfilter) | `void` | Re-applies the Grid Filter |
| [setGridFilterExpression(expression)](https://www.adaptabletools.com/docs/reference/gridfilterapi.md#setgridfilterexpression) | `void` | Sets the Grid Filter (for the current layout)<br/><br/>If `expression` is `null`, `undefined` or a blank string the Grid Filter<br/>is cleared (equivalent to calling ). This makes<br/>it safe to drive the Grid Filter from form-style controls that emit<br/>empty values when the user deselects everything, without having to<br/>branch in the caller. |
| [setGridFilterExpressionUsingNamedQuery(namedQuery)](https://www.adaptabletools.com/docs/reference/gridfilterapi.md#setgridfilterexpressionusingnamedquery) | `void` | Sets the Grid Filter (for the current layout) |
| [suspendGridFilter()](https://www.adaptabletools.com/docs/reference/gridfilterapi.md#suspendgridfilter) | `void` | Suspends the Grid Filter |
| [unSuspendGridFilter()](https://www.adaptabletools.com/docs/reference/gridfilterapi.md#unsuspendgridfilter) | `void` | Unsuspends the Grid Filter |

---

## Filter Events

### Column Filter Changed Event

The Column Filter Changed Event fires for every Column Filter editor or state change — including incomplete drafts that are not persisted.

Prefer this Event for new code. Use `isApplied` to ignore drafts, and `isComplete` to tell a finished Expression from a clear or an incomplete editor.

This is often used when wanting to [evaluate expressions on the Server](https://www.adaptabletools.com/docs/adaptable-server-evaluation/index.md)

#### ColumnFilterChangedInfo

The Event's [`ColumnFilterChangedInfo`](https://www.adaptabletools.com/docs/reference/columnfilterchangedinfo.md) object is defined as follows:

| Property | Type | Description |
| --- | --- | --- |
| [columnFilters](https://www.adaptabletools.com/docs/reference/columnfilterchangedinfo.md#columnfilters) | [`ColumnFilter`](https://www.adaptabletools.com/docs/reference/columnfilter.md)`[]` | Currently persisted Column Filters after this change.<br/>Unchanged when `isApplied` is false. |
| [columnId](https://www.adaptabletools.com/docs/reference/columnfilterchangedinfo.md#columnid) | `string` | Column whose filter changed.<br/>Undefined for bulk actions (e.g. clear/suspend all). |
| [expression](https://www.adaptabletools.com/docs/reference/columnfilterchangedinfo.md#expression) | `string` | Expression for `columnId` after this change when available.<br/>May be omitted for incomplete drafts with nothing persistable yet. |
| [isApplied](https://www.adaptabletools.com/docs/reference/columnfilterchangedinfo.md#isapplied) | `boolean` | True when persisted Column Filters were updated (layout state) and grid<br/>filtering may change. False when only an in-progress editor draft changed<br/>(incomplete expression, or manual-apply pending Apply).<br/><br/>When true, ColumnFilterApplied is also<br/>emitted for backward compatibility. |
| [isComplete](https://www.adaptabletools.com/docs/reference/columnfilterchangedinfo.md#iscomplete) | `boolean` | Whether the filter expression for this change is fully specified.<br/><br/>- When `isApplied` is false: the editor draft is valid (not e.g. an<br/> operator with a missing value). False for incomplete drafts.<br/>- When `isApplied` is true: a complete Expression was written or remains<br/> for the column. False when the column filter was cleared/deactivated.<br/><br/>These flags diverge for clear/deactivate (`isComplete: false`,<br/>`isApplied: true`), incomplete drafts (`false`/`false`), manual-apply<br/>pending Apply (`true`/`false`), and the usual complete apply (`true`/`true`). |
| [adaptableContext](https://www.adaptabletools.com/docs/reference/columnfilterchangedinfo.md#adaptablecontext) | `any` | Custom application Context provided in `AdaptableOptions.adaptableContext` |

#### Event Subscription

Subscribing to the Event is done the same way as with all [Adaptable Events](https://www.adaptabletools.com/docs/technical-reference-adaptable-events/index.md):

```ts
api.eventApi.on('ColumnFilterChanged', (eventInfo: ColumnFilterChangedInfo) => {
  if (eventInfo.isApplied) {
    // persisted Filters changed — grid filtering may run
  }
});
```

---

### Column Filter Applied Event

`ColumnFilterApplied` is still emitted whenever `ColumnFilterChanged` fires with `isApplied: true`.

Use `ColumnFilterChanged` for new subscriptions. Existing `ColumnFilterApplied` listeners keep working.

#### ColumnFilterAppliedInfo

The Event's [`ColumnFilterAppliedInfo`](https://www.adaptabletools.com/docs/reference/columnfilterappliedinfo.md) object contains the currently applied Column Filters and an AST for each Filter Expression (`columnFilterExpressionASTs`, same order as `columnFilters`):

| Property | Type | Description |
| --- | --- | --- |
| [columnFilterExpressionASTs](https://www.adaptabletools.com/docs/reference/columnfilterappliedinfo.md#columnfilterexpressionasts) | `Array<any \| null>` | AST for each applied Column Filter Expression, index-aligned with<br/>. `null` when that filter has no Expression or the<br/>Expression is not currently parsable. |
| [columnFilters](https://www.adaptabletools.com/docs/reference/columnfilterappliedinfo.md#columnfilters) | [`ColumnFilter`](https://www.adaptabletools.com/docs/reference/columnfilter.md)`[] \| undefined` | Currently applied Column Filters |
| [adaptableContext](https://www.adaptabletools.com/docs/reference/columnfilterappliedinfo.md#adaptablecontext) | `any` | Custom application Context provided in `AdaptableOptions.adaptableContext` |

---

### Grid Filter Applied Event

The Grid Filter Applied Event is triggered whenever a [Grid Filter](https://www.adaptabletools.com/docs/handbook-grid-filter/index.md) is applied in AdapTable.

This is often used when wanting to [manage expressions on the Server](https://www.adaptabletools.com/docs/adaptable-server-evaluation/index.md)

#### GridFilterAppliedInfo

The Grid Filter Applied Event has a [`GridFilterAppliedInfo`](https://www.adaptabletools.com/docs/reference/gridfilterappliedinfo.md) object defined as follows:

| Property | Type | Description |
| --- | --- | --- |
| [gridFilter](https://www.adaptabletools.com/docs/reference/gridfilterappliedinfo.md#gridfilter) | [`GridFilter`](https://www.adaptabletools.com/docs/reference/gridfilter.md)` \| undefined` | Grid Filter on the current Layout after this change.<br/><br/>`undefined` when the Layout has no Grid Filter (including after it is cleared). |
| [gridFilterExpressionAST](https://www.adaptabletools.com/docs/reference/gridfilterappliedinfo.md#gridfilterexpressionast) | `any` | AST of `gridFilter.Expression`.<br/><br/>`null` when the Layout has no Grid Filter. |
| [adaptableContext](https://www.adaptabletools.com/docs/reference/gridfilterappliedinfo.md#adaptablecontext) | `any` | Custom application Context provided in `AdaptableOptions.adaptableContext` |

#### Event Subscription

Subscribing to the Event is done the same way as with all [Adaptable Events](https://www.adaptabletools.com/docs/technical-reference-adaptable-events/index.md):

```ts
api.eventApi.on('GridFilterApplied', (eventInfo: GridFilterAppliedInfo) => {
    // do something with the info
});
```

---

## System Filter Operators

Column Filter operators are boolean [Expression Functions](https://www.adaptabletools.com/docs/adaptable-ql-expression-functions/index.md) (e.g. `EQ`, `CONTAINS`, `IS_BLANK`, `IS_SAME_DAY`).

Which operators appear for a Column depends on its [Column Data Type](https://www.adaptabletools.com/docs/dev-guide-aggrid-cell-data-types/index.md).

See the [System Filters](https://www.adaptabletools.com/docs/handbook-column-filter-system-filters/index.md#appendix-system-filter-list) appendix for the full list by Data Type.

- Developers can add their own operators via [Custom Column Filters](https://www.adaptabletools.com/docs/handbook-column-filter-custom-filters/index.md) (boolean Expression Functions)
- They can also limit - or extend - which operators are available via [System Filters](https://www.adaptabletools.com/docs/handbook-column-filter-system-filters/index.md)
