@adaptabletools/adaptable
Version:
Powerful AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
86 lines (85 loc) • 2.99 kB
JavaScript
export class AdaptableFilterHandler {
adaptableApi;
colId;
filterDisplayValuesResult;
previousFilterDisplayValuesResult;
constructor(adaptableApi) {
this.adaptableApi = adaptableApi;
}
init(params) {
this.colId = params.column.getColId();
}
doesFilterPass(params) {
try {
const rowNode = params.node;
const isRowFilterable = this.adaptableApi.gridApi.internalApi.isRowFilterable(rowNode);
if (!isRowFilterable) {
return true;
}
const columnFilterModel = params.model;
if (!columnFilterModel) {
this.adaptableApi.logWarn(`AdaptableFilterHandler.doesFilterPass: No filter model found for column ${this.colId}`);
return true;
}
if (columnFilterModel.IsSuspended) {
return true;
}
return this.adaptableApi.filterApi.columnFilterApi.internalApi.evaluateColumnFilter(columnFilterModel, rowNode);
}
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);
}
async 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) {
return;
}
this.resetFilterDisplayValues();
}
resetFilterDisplayValues() {
if (this.filterDisplayValuesResult) {
this.previousFilterDisplayValuesResult = this.filterDisplayValuesResult;
}
this.filterDisplayValuesResult = undefined;
}
async refreshFilterDisplayValues() {
this.resetFilterDisplayValues();
return this.getFromCacheOrFetchFilterDisplayValues({ currentSearchValue: '' });
}
refresh(_params) { }
destroy() {
this.filterDisplayValuesResult = undefined;
this.previousFilterDisplayValuesResult = undefined;
}
}