Skip to content

Description

The plugin allows filtering the table data either by the built-in component or with the API.

See the filtering demo for examples.

Example

settings = {
data: getData(),
colHeaders: true,
rowHeaders: true,
dropdownMenu: true,
filters: true,
};
<hot-table [settings]="settings"></hot-table>

Options

filters

Source code

filters.filters : boolean

The filters option configures the Filters plugin.

You can set the filters option to one of the following:

SettingDescription
falseDisable the Filters plugin
trueEnable the Filters plugin
An objectEnable the Filters plugin with custom settings

If you set the filters option to an object, you can configure the following settings:

PropertyPossible valuesDescription
searchMode'show' | 'apply'Enable filtering only visible elements

If filers is set to true, the searchMode option is set to 'show' by default.

Read more:

Default: undefined
Example

// enable the `Filters` plugin
filters: true,

Methods

addCondition

Source code

filters.addCondition(column, name, args, [operationId])

Adds condition to the conditions collection at specified column index.

Possible predefined conditions:

ConditionDescriptionExpected args
begins_withBegins with[value: string], e.g. ['de']
betweenBetween[from: number|string, to: number|string], e.g. [10, 50]
by_valueBy value[[...values: Array]], e.g. [['ing', 'ed', 'as']]. The outer array wraps a single inner array that contains all values to keep (show) after filtering.
containsContains[value: string], e.g. ['ing']
date_afterAfter a date (exclusive)[dateString: string], e.g. ['1/1/2023']. The format must match the column’s dateFormat option.
date_after_or_equalAfter or equal to a date (inclusive)[dateString: string], e.g. ['1/1/2023']. The format must match the column’s dateFormat option.
date_beforeBefore a date (exclusive)[dateString: string], e.g. ['1/1/2023']. The format must match the column’s dateFormat option.
date_before_or_equalBefore or equal to a date (inclusive)[dateString: string], e.g. ['1/1/2023']. The format must match the column’s dateFormat option.
date_todayToday[]
date_tomorrowTomorrow[]
date_yesterdayYesterday[]
emptyEmpty[]
ends_withEnds with[value: string], e.g. ['ing']
eqEqual[value: string|number], e.g. ['John']
gtGreater than[value: number], e.g. [95]
gteGreater than or equal[value: number], e.g. [95]
intl_date_afterAfter a date, exclusive (locale-aware)[dateString: string], e.g. ['2023-01-01']
intl_date_after_or_equalAfter or equal to a date, inclusive (locale-aware)[dateString: string], e.g. ['2023-01-01']
intl_date_beforeBefore a date, exclusive (locale-aware)[dateString: string], e.g. ['2023-01-01']
intl_date_before_or_equalBefore or equal to a date, inclusive (locale-aware)[dateString: string], e.g. ['2023-01-01']
intl_date_betweenBetween dates (locale-aware)[fromDateString: string, toDateString: string], e.g. ['2023-01-01', '2023-12-31']
intl_date_todayToday (locale-aware)[]
intl_date_tomorrowTomorrow (locale-aware)[]
intl_date_yesterdayYesterday (locale-aware)[]
intl_time_afterAfter a time (locale-aware)[timeString: string], e.g. ['12:00']
intl_time_beforeBefore a time (locale-aware)[timeString: string], e.g. ['08:00']
intl_time_betweenBetween times (locale-aware)[fromTimeString: string, toTimeString: string], e.g. ['08:00', '12:00']
ltLess than[value: number], e.g. [10]
lteLess than or equal[value: number], e.g. [10]
noneNone (no filter)[]
not_betweenNot between[from: number|string, to: number|string], e.g. [10, 50]
not_containsNot contains[value: string], e.g. ['ing']
not_emptyNot empty[]
neqNot equal[value: string|number], e.g. ['John']

Possible operations on collection of conditions:

  • conjunction - Conjunction on conditions collection (by default), i.e. for such operation:
    c1 AND c2 AND c3 AND c4 … AND cn === TRUE, where c1 … cn are conditions.
  • disjunction - Disjunction on conditions collection, i.e. for such operation:
    c1 OR c2 OR c3 OR c4 … OR cn === TRUE, where c1, c2, c3, c4 … cn are conditions.
  • disjunctionWithExtraCondition - Disjunction on first n - 1* conditions from collection with an extra requirement computed from the last condition, i.e. for such operation:
    c1 OR c2 OR c3 OR c4 … OR cn-1 AND cn === TRUE, where c1, c2, c3, c4 … cn are conditions.

* when n is collection size; it’s used i.e. for one operation introduced from UI (when choosing from filter’s drop-down menu two conditions with OR operator between them, mixed with choosing values from the multiple choice select)

Note: Mind that you cannot mix different types of operations (for instance, if you use conjunction, use it consequently for a particular column).

Note: If the number of conditions added programmatically via addCondition() exceeds the capacity of the filter’s dropdown UI (at most 2 regular conditions and 1 by_value condition per column), the extra conditions will be applied to the data but will not be visible or editable in the dropdown menu.

Example

import { AfterViewInit, Component, ViewChild } from "@angular/core";
import {
GridSettings,
HotTableModule,
HotTableComponent,
} from "@handsontable/angular-wrapper";
`@Component`({
selector: "app-example",
standalone: true,
imports: [HotTableModule],
template: ` <div>
<hot-table [settings]="gridSettings" />
</div>`,
})
export class ExampleComponent implements AfterViewInit {
`@ViewChild`(HotTableComponent, { static: false })
readonly hotTable!: HotTableComponent;
readonly gridSettings = <GridSettings>{
data: this.getData(),
filters: true,
};
ngAfterViewInit(): void {
// Access to filters plugin instance
const hot = this.hotTable.hotInstance;
const filtersPlugin = hot.getPlugin("filters");
// Add filter "Begins with" with value "de" to column at index 1
filtersPlugin.addCondition(1, "begins_with", ["de"]);
filtersPlugin.filter();
// Add filter "Between" 10 and 50 to column at index 1
filtersPlugin.addCondition(1, "between", [10, 50]);
filtersPlugin.filter();
// Add filter "By value" to column at index 1
// In this case, all values that don't match will be filtered.
filtersPlugin.addCondition(1, "by_value", [["ing", "ed", "as", "on"]]);
filtersPlugin.filter();
// Add filter "Contains" with value "ing" to column at index 1
filtersPlugin.addCondition(1, "contains", ["ing"]);
filtersPlugin.filter();
// Add filter "After a date" with value "1/1/2023" to column at index 1
filtersPlugin.addCondition(1, "date_after", ["1/1/2023"]);
filtersPlugin.filter();
// Add filter "Before a date" with value "1/1/2023" to column at index 1
filtersPlugin.addCondition(1, "date_before", ["1/1/2023"]);
filtersPlugin.filter();
// Add filter "Today" with no arguments to column at index 1
filtersPlugin.addCondition(1, "date_today", []);
filtersPlugin.filter();
// Add filter "Tomorrow" with no arguments to column at index 1
filtersPlugin.addCondition(1, "date_tomorrow", []);
filtersPlugin.filter();
// Add filter "Yesterday" with no arguments to column at index 1
filtersPlugin.addCondition(1, "date_yesterday", []);
filtersPlugin.filter();
// Add filter "Empty" with no arguments to column at index 1
filtersPlugin.addCondition(1, "empty", []);
filtersPlugin.filter();
// Add filter "Ends with" with value "ing" to column at index 1
filtersPlugin.addCondition(1, "ends_with", ["ing"]);
filtersPlugin.filter();
// Add filter "Equal" with value "John" to column at index 1
filtersPlugin.addCondition(1, "eq", ["John"]);
filtersPlugin.filter();
// Add filter "Greater than" 95 to column at index 1
filtersPlugin.addCondition(1, "gt", [95]);
filtersPlugin.filter();
// Add filter "Greater than or equal" 95 to column at index 1
filtersPlugin.addCondition(1, "gte", [95]);
filtersPlugin.filter();
// Add filter "Less than" 10 to column at index 1
filtersPlugin.addCondition(1, "lt", [10]);
filtersPlugin.filter();
// Add filter "Less than or equal" 10 to column at index 1
filtersPlugin.addCondition(1, "lte", [10]);
filtersPlugin.filter();
// Add filter "None" with no arguments to column at index 1
filtersPlugin.addCondition(1, "none", []);
filtersPlugin.filter();
// Add filter "Not between" 10 and 50 to column at index 1
filtersPlugin.addCondition(1, "not_between", [10, 50]);
filtersPlugin.filter();
// Add filter "Not contains" with value "ing" to column at index 1
filtersPlugin.addCondition(1, "not_contains", ["ing"]);
filtersPlugin.filter();
// Add filter "Not empty" with no arguments to column at index 1
filtersPlugin.addCondition(1, "not_empty", []);
filtersPlugin.filter();
// Add filter "Not equal" with value "John" to column at index 1
filtersPlugin.addCondition(1, "neq", ["John"]);
filtersPlugin.filter();
}
private getData(): any[] {
// Get some data
}
}
ParamTypeDefaultDescription
columnnumberVisual column index.
namestringCondition short name.
argsArrayCondition arguments. The expected format depends on the condition - see the table above for details.
[operationId]string”conjunction”optional id of operation which is performed on the column.

clearConditions

Source code

filters.clearConditions([column])

Clears all conditions previously added to the collection for the specified column index or, if the column index was not passed, clear the conditions for all columns.

ParamTypeDescription
[column]numberoptional Visual column index.

destroy

Source code

filters.destroy()

Destroys the plugin instance.

disablePlugin

Source code

filters.disablePlugin()

Disables the plugin functionality for this Handsontable instance.

enablePlugin

Source code

filters.enablePlugin()

Enables the plugin functionality for this Handsontable instance.

exportConditions

Source code

filters.exportConditions() ⇒ Array

Exports filter conditions for all columns from the plugin. The array represents the filter state for each column. For example:

[
{
column: 1,
operation: 'conjunction',
conditions: [
{ name: 'gt', args: [95] },
]
},
{
column: 7,
operation: 'conjunction',
conditions: [
{ name: 'contains', args: ['mike'] },
{ name: 'begins_with', args: ['m'] },
]
},
]

filter

Source code

filters.filter()

Filters data based on added filter conditions.

Emits: Hooks#event:beforeFilter, Hooks#event:afterFilter

getDataMapAtColumn

Source code

filters.getDataMapAtColumn(physicalColumn) ⇒ Array<{meta: CellProperties, value: any}>

Returns the full dataset for a column with cell meta for each row. The dataset is independent of any index mapper - no matter if the data is filtered, sorted, or otherwise transformed all rows are included.

ParamTypeDescription
physicalColumnnumberThe physical column index.

Returns: Array<{meta: CellProperties, value: any}> - Array of objects with meta and value, one per source row.

getSelectedColumn

Source code

filters.getSelectedColumn() ⇒ Object | null

Gets last selected column index.

Returns: Object | null - Returns null when a column is not selected. Otherwise, returns an object with visualIndex and physicalIndex properties containing the index of the column.

importConditions

Source code

filters.importConditions(conditions)

Imports filter conditions to all columns to the plugin. The method accepts the array of conditions with the same structure as the Filters#exportConditions method returns. Importing conditions will replace the current conditions. Once replaced, the state of the condition will be reflected in the UI. To apply the changes and filter the table, call the Filters#filter method eventually.

ParamTypeDescription
conditionsArrayArray of conditions.

isEnabled

Source code

filters.isEnabled() ⇒ boolean

Checks if the plugin is enabled in the handsontable settings. This method is executed in Hooks#beforeInit hook and if it returns true then the Filters#enablePlugin method is called.

removeConditions

Source code

filters.removeConditions(column)

Removes conditions at specified column index.

ParamTypeDescription
columnnumberVisual column index.

updatePlugin

Source code

filters.updatePlugin()

Update plugin state after Handsontable settings update.