UNPKG

@adaptabletools/adaptable

Version:

Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements

93 lines (92 loc) 3.74 kB
export class AdaptableFilterHandler { constructor(adaptableApi, columnSetup) { this.adaptableApi = adaptableApi; this.colId = columnSetup.colId; } getCurrentColumnFilters() { const columnFilters = this.adaptableApi.filterApi.columnFilterApi .getActiveColumnFilters() .filter((columnFilter) => this.adaptableApi.filterApi.columnFilterApi.isColumnFilterActive(columnFilter)) .filter((columnFilter) => columnFilter.ColumnId === this.colId) .filter((columnFilter) => { const shouldEvaluateFilterOnClient = this.adaptableApi.expressionApi.internalApi.shouldEvaluatePredicatesInAdaptableQL('ColumnFilter', columnFilter, columnFilter.Predicates); return shouldEvaluateFilterOnClient; }); return columnFilters; } doesFilterPass(params) { try { const rowNode = params.node; // first assess if the Row is filterable - if not, then return true so it always appears in Grid const isRowFilterable = this.adaptableApi.gridApi.internalApi.isRowFilterable(rowNode); if (!isRowFilterable) { return true; } const columnFilters = this.getCurrentColumnFilters(); const anyFilterFailed = columnFilters.some((columnFilter) => { const result = !this.adaptableApi.filterApi.columnFilterApi.internalApi.evaluateColumnFilter(columnFilter, rowNode); return result; }); return anyFilterFailed ? false : true; } catch (ex) { this.adaptableApi.consoleError(ex); return false; } } getCachedFilterDisplayValues() { return this.filterDisplayValuesResult; } getLastCachedFilterDisplayValues() { return this.filterDisplayValuesResult ?? this.previousFilterDisplayValuesResult; } getFromCacheOrFetchFilterDisplayValues(options) { if (this.filterDisplayValuesResult) { return Promise.resolve(this.filterDisplayValuesResult); } return this.fetchFilterDisplayValues(options); } fetchFilterDisplayValues(options) { return this.adaptableApi.gridApi.internalApi .getDistinctFilterDisplayValuesForColumn({ columnId: this.colId, get currentSearchValue() { return options.currentSearchValue; }, previousResult: this.filterDisplayValuesResult, }) .then((result) => { this.filterDisplayValuesResult = result; return result; }); } onNewRowsLoaded() { this.resetFilterDisplayValues(); } onAnyFilterChanged() { const filterOptions = this.adaptableApi.optionsApi.getFilterOptions(); if (!filterOptions.customInFilterValues) { // no-one is using value.count or value.visible // or context.sortedValues // so no need to reset the filter display values return; } this.resetFilterDisplayValues(); } resetFilterDisplayValues() { if (this.filterDisplayValuesResult) { this.previousFilterDisplayValuesResult = this.filterDisplayValuesResult; } // Reset the filter display values manually this.filterDisplayValuesResult = undefined; } async refreshFilterDisplayValues() { this.resetFilterDisplayValues(); return this.getFromCacheOrFetchFilterDisplayValues({ currentSearchValue: '' }); } refresh(_params) { } destroy() { this.filterDisplayValuesResult = undefined; this.previousFilterDisplayValuesResult = undefined; } }