Input Filter (default)
Index
Description
Input text filter is the default filter that will be used when the user ommits the filter.model
.
Demo
UI Usage
All column types support the following operators: (>
, >=
, <
, <=
, <>
, !=
, =
, ==
, *
) that can be typed directly into the text filter, range filters can also have 1 of these options (rangeInclusive
(default) or rangeExclusive
). Also note that <>
and !=
are aliases and are equivalent, the same applies to =
and ==
.
Examples:
Number type
>100
=> bigger than 100<>100
=> anything with the exception of 10015..44
=> range between 15 and 44 (you can also provide optionrangeInclusive
(default) orrangeExclusive
)
Date types
>=2001-01-01
=> greater or equal than date2001-01-01
<02/28/17
=> lower than date02/28/17
2001-01-01..2002-02-22
=> range between 2001-01-01 and 2002-02-22
String type
<>John
=> not containing the sub-stringJohn
!=John
=> not equal to the textJohn
(note that this is not equivalent to<>
)John*
=> starts with the sub-stringJohn
*Doe
=> ends with the sub-stringDoe
ab..ef
=> anything included between "af" and "ef"refer to the ASCII table for each character assigned index
!=
=> get defined only data and exclude anyundefined
,null
or empty string''
notice the empty string in the search value
' '
Note that you could also do the same kind of functionality by using the Compound Filter.
Note
For filters to work properly (default is string
), make sure to provide a FieldType
(type is against the dataset, not the Formatter), for example on a Date Filters, we can set the FieldType
of dateUtc/date (from dataset) can use an extra option of filterSearchType
to let user filter more easily. For example, with a column having a "UTC Date" coming from the dataset but has a formatter: Formatters.dateUs
, you can type a date in US format >02/28/2017
, also when dealing with UTC you have to take the time difference in consideration. However, a better recommendation would be to use the Filters.compoundDate
to provide a better user experience by selecting a date from a date picker (nonetheless, an input text filter would also work as long as you use the correct date format).
How to use Input Filter
Simply set the flag filterable
to True and and enable the filters in the Grid Options. Here is an example with a full column definition:
Filtering with Localization (i18n)
When using a regular grid with a JSON dataset (that is when Backend Service API is not being used), the filter might not work correctly on cell values that are translated (because it will try to filter against the translation key instead of the actual formatted value). So to avoid this problem, a new extra params
was added to help resolving this problem, you need to set useFormatterOuputToFilter: true
and the filter will, has the name suggest, use the output of the Formatter to filter against the translated cell value. Example:
How to Filter Complex Objects?
You can filter complex objects using the dot (.) notation inside the field
property defined in your Columns Definition.
For example, let say that we have this dataset
We can now filter the zip code from the buyer's address using this filter:
Update Filters Dynamically
You can update/change the Filters dynamically (on the fly) via the updateFilters
method from the FilterService
. Note that calling this method will override all filters and replace them with the new array of filters provided. For example, you could update the filters from a button click or a select dropdown list with predefined filter set.
View
Component
Extra Arguments
The updateFilters
method has 2 extra arguments:
2nd argument, defaults to true, is to emit a filter changed event (the GridStateService uses this event)
optional and defaults to true
updateFilters([], true)
3rd argument is to trigger a backend query (when using a Backend Service like OData/GraphQL), this could be useful when using updateFilters & updateSorting and you wish to only send the backend query once.
optional and defaults to true
updateFilters([], true, true)
Query Different Field
Sometime you want to display a certain column (let say countryName
) but you want to filter from a different column (say countryCode
), in such use case you can use 1 of these 4 optional
queryField
: this will affect both the Filter & SortqueryFieldFilter
: this will affect only the FilterqueryFieldSorter
: this will affect only the SortqueryFieldNameGetterFn
: dynamically change column to do Filter/Sort (see below)
Dynamic Query Field
What if you a field that you only know which field to query only at run time and depending on the item object (dataContext
)? We can defined a queryFieldNameGetterFn
callback that will be executed on each row when Filtering and/or Sorting.
Debounce/Throttle Text Search (wait for user to stop typing before filtering)
When having a large dataset, it might be useful to add a debounce delay so that typing multiple character successively won't affect the search time, you can use the filterTypingDebounce
grid option for that use case. What it will do is simply wait for the user to finish typing before executing the filter condition, you typically don't want to put this number too high and I find that between 250-500 is a good number.
Ignore Locale Accent in Text Filter/Sorting
You can ignore latin accent (or any other language accent) in text filter via the Grid Option ignoreAccentOnStringFilterAndSort
flag (default is false). This flag will normalize (remove accents) the text before comparing it.
Custom Filter Predicate
You can provide a custom predicate by using the filterPredicate
when defining your filter
, the callback will provide you with 2 arguments (dataContext
and searchFilterArgs
). The searchFilterArgs
has a type of SearchColumnFilter
interface which will provide you more info about the filter itself (like parsed operator, search terms, column definition, column id and type as well). You can see a live demo at Example 14 and the associated lines of code.
The custom filter predicate above was to answer a Stack Overflow question and will work similarly to an SQL LIKE matcher (it's not perfect and probably requires more work but is enough to demo the usage of a custom filter predicate)
Filter Shortcuts
User can declare some Filter Shortcuts, that will be added to the Header Menu of the Column it was assigned. These shortcuts are simply a list of filter search values (e.g. Filter the Blank/Non-Blanks Values), the end user can type the same search values themselves but the shortcuts are simply meant to be quicker without having to know what to type (e.g. Filter Current Year).
The shortcuts can be declared via an array that must include at least a title
(or titleKey
) a searchTerms
array and lastly an optional operator
can also be provided. The available properties of these shortcut is a merge of Header Menu Item interface (except command
and action
which are reserved and assigned internally) and of course the 3 properties mentioned above. The declaration is very similar to how we use it when declaring Grid Presets as shown below
Last updated