Vue Data GridFloating Filter Component - Legacy

This page describes the old way of declaring custom floating filter components when the grid option enableFilterHandlers is not set. It is strongly recommended to instead use the new behaviour described on the Floating Filter Component page.

Floating Filter Components allow you to add your own floating filter types to AG Grid. You can create a Custom Floating Filter Component to work alongside one of the grid's Provided Filters, or alongside a Custom Filter.

Example: Custom Floating Filter Copy Link

In the following example you can see how the Gold, Silver, Bronze and Total columns have a custom floating filter NumberFloatingFilter. This filter substitutes the standard floating filter for an input box that the user can change to adjust how many medals of each column to filter by based on a greater than filter.

Implementing a Floating Filter Component Copy Link

When a Vue component is instantiated the grid will make the grid APIs, a number of utility methods as well as the cell and row values available to you via this.params.

The interface for a custom floating filter component is as follows:

interface IFloatingFilter {
    // Mandatory methods

    // Gets called every time the parent filter changes. Your floating
    // filter would typically refresh its UI to reflect the new filter
    // state. The provided parentModel is what the parent filter returns
    // from its getModel() method. The event is the FilterChangedEvent
    // that the grid fires.
    onParentModelChanged(parentModel: any, event: FilterChangedEvent): void;

    // Optional methods

    // A hook to perform any necessary operations when the column definition is updated.
    refresh(params: IFloatingFilterParams): void;

    // Gets called every time the popup is shown, after the GUI returned in
    // getGui is attached to the DOM. If the filter popup is closed and re-opened, this method is
    // called each time the filter is shown. This is useful for any logic that requires attachment
    // before executing, such as putting focus on a particular DOM element. 
    afterGuiAttached(params?: IAfterGuiAttachedParams): void;

    // Gets called when the column is destroyed. If your custom filter needs to do
    // any resource cleaning up, do it here. A filter is NOT destroyed when it is
    // made 'not visible', as the GUI is kept to be shown again if the user selects
    // that filter again. The filter is destroyed when the column it is associated with is
    // destroyed, either when new columns are set into the grid, or the grid itself is destroyed.
    destroy(): void;
}

Custom Floating Filter Parameters Copy Link

When a Vue component is instantiated the grid will make the grid APIs, a number of utility methods as well as the cell and row values available to you via this.params - the interface for what is provided is documented below.

If custom params are provided via the colDef.floatingFilterComponentParams property, these will be additionally added to the params object, overriding items of the same name if a name clash exists.

Properties available on the FloatingFilterDisplayParams<TData = any, TContext = any, TModel = any, TCustomParams = object> interface.

filterParamsCopy Link
TCustomParams
The params object passed to the filter. This is to allow the floating filter access to the configuration of the parent filter. For example, the provided filters use debounceMs from the parent filter params.
TModel | null
The current applied filter model for the column.
onModelChangeCopy Link
Function
Callback that should be called every time the model in the component changes. additionalEventAttributes If provided, will be passed to the filter changed event
onUiChangeCopy Link
Function
Callback that can be optionally called every time the floating filter UI changes. The grid will respond with emitting a FloatingFilterUiChangedEvent. Apart from emitting the event, the grid takes no further action. The callback takes one optional parameter which, if included, will get merged to the FloatingFilterUiChangedEvent object.
getHandlerCopy Link
Function
Get the filter handler instance. If using a SimpleColumnFilter, the handler is is a wrapper object containing the provided doesFilterPass callback.
sourceCopy Link
'init' | 'ui' | 'filter' | 'api' | 'colDef' | 'dataChanged'
'init' | 'ui' | 'filter' | 'api' | 'colDef' | 'dataChanged'
The column this filter is for.
showParentFilterCopy Link
Function
Shows the parent filter popup.
The grid api.
contextCopy Link
TContext
Application context as set on gridOptions.context.

Floating Filter Lifecycle Copy Link

Floating filters do not contain filter logic themselves, they are just an additional UI component for the underlying filter component. For this reason, the floating filters lifecycle is bound to the visibility of the column; if you hide a column (either set not visible, or horizontally scroll the column out of view) then the floating filter UI component is destroyed. If the column comes back into view, it is created again. This is different to column filters, where the column filter will exist as long as the column exists, regardless of the column's visibility.

To see examples of the different ways to implement floating filters please refer to the examples below.

Floating Filter Methods on Provided Filters Copy Link

When the user interacts with a floating filter, the floating filter must set the state of the main parent filter in order for filter changes to take effect This is done by the floating filter getting a reference to the parent filter instance and calling a method on it.

If you create your own filter and floating filter, it is up to you which method you expose on the filter for the floating filter to call. This contract is between the filter and the floating filter and doesn't go through the grid.

The Simple Filters (Text, Number, Date) provide methods that the corresponding provided floating filters can call. This information is useful if a) you want to create your own floating filter that is paired with a provided parent filter or b) you are just interested to know how the interaction works to help build your own filters and floating filters.

  • Date, Text and Number Filters: all these filters provide a method onFloatingFilterChanged(type: string, value: string) where type is the type ('lessThan', 'equals', etc.) and the value is the text value to use (the number and date filters will convert the text to the corresponding type).

  • Set Filter: The floating set filter is not editable, so no method is exposed on the parent filter for the floating filter to call.

You could also call setModel() on the filters as an alternative. For example, you could build your own floating filter for the Set Filter that allows picking all European or Asian countries, or you could provide your own Number floating filter that allows selecting ranges (the provided Number floating filter does not allow editing ranges).

Example: Custom Filter And Custom Floating Filter Copy Link

This example extends the previous example by also providing its own custom filter NumberFilter in the Gold, Silver, Bronze and Total columns.

In this example it is important to note that:

  1. NumberFilter.getModel() returns a number representing the current greater than filter.
  2. NumberFilter.setModel(model) takes an object that can be of any type. If the value passed is numeric then the filter gets applied with a condition of greater than.
  3. NumberFloatingFilter.onParentModelChanged(parentModel) receives the result of NumberFilter.getModel() every time the NumberFilter model changes.
  4. NumberFloatingFilter calls parentFilter.myMethodForTakingValueFromFloatingFilter(change) every time the user changes the floating filter value.
  5. NumberFilter.myMethodForTakingValueFromFloatingFilter(change) performs the filtering.

Example: Custom Filter And Read-Only Floating Filter Copy Link

If you want to provide a custom filter but don't want to provide an equivalent custom floating filter, you can implement getModelAsString() and you will get a read-only floating filter for free.

This example uses the previous custom filter but implements getModelAsString(). Note how there are no custom floating filters and yet each column using NumberFilter (Gold, Silver, Bronze and Total) has a read-only floating filter that gets updated as you change the values from the main filter.

Sliding Floating Filters Copy Link

The below example shows how to create a custom floating filter re-using the out-of-the-box Number Filter .