@adaptabletools/adaptable
Version:
Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
182 lines (181 loc) • 7.59 kB
JavaScript
import * as InternalRedux from '../../Redux/ActionsReducers/InternalRedux';
import * as LayoutRedux from '../../Redux/ActionsReducers/LayoutRedux';
import { ApiBase } from './ApiBase';
import ArrayExtensions from '../../Utilities/Extensions/ArrayExtensions';
import { ColumnFilterInternalApi } from '../Internal/ColumnFilterInternalApi';
export class ColumnFilterApiImpl extends ApiBase {
constructor(_adaptable) {
super(_adaptable);
this.internalApi = new ColumnFilterInternalApi(_adaptable);
}
getFilterPredicateDefsForColumn(column) {
const scope = {
ColumnIds: [column.columnId],
};
return this.getAdaptableApi()
.predicateApi.internalApi.getFilterPredicateDefs(scope)
.filter((predicate) => this.getColumnScopeApi().isColumnInScope(column, predicate.columnScope));
}
getFilterPredicateDefsForColumnId(columnId) {
const column = this.getColumnApi().getColumnWithColumnId(columnId);
return column ? this.getFilterPredicateDefsForColumn(column) : undefined;
}
showQuickFilterBar() {
this.dispatchAction(InternalRedux.QuickFilterBarShow());
}
hideQuickFilterBar() {
this.dispatchAction(InternalRedux.QuickFilterBarHide());
}
isQuickFilterAvailable() {
return this._adaptable.isQuickFilterAvailable();
}
isQuickFilterVisible() {
return (this.isQuickFilterAvailable() &&
this.getAdaptableInternalApi().getInternalState().IsQuickFilterVisible);
}
getColumnFilters() {
const currentLayout = this.getLayoutApi().getCurrentLayout();
return currentLayout.ColumnFilters ?? [];
}
getActiveColumnFilters() {
return this.getColumnFilters().filter((columnFilter) => !columnFilter.IsSuspended);
}
getColumnFilterDefs() {
const filters = this.getColumnFilters();
return filters.map((columnFilter) => {
const column = this.getColumnApi().getColumnWithColumnId(columnFilter.ColumnId);
const predicates = columnFilter.Predicates.map((predicate) => this.getPredicateApi().getPredicateDefById(predicate.PredicateId));
return {
predicates,
dataType: column?.dataType,
columnFilter: columnFilter,
};
});
}
getColumnFiltersForLayout(layoutName) {
const layout = this.getLayoutApi().getLayoutByName(layoutName);
return layout.ColumnFilters ?? [];
}
setColumnFilters(columnFilters) {
columnFilters.forEach((columnFilter) => {
if (!columnFilter.Predicates || columnFilter.Predicates.length == 0) {
this.logWarn('Column Filter has no Predicate', columnFilter);
}
else {
const isValidPredicate = this.getPredicateApi().isEveryPredicateValid(columnFilter.Predicates);
if (!isValidPredicate) {
this.logWarn('Column Filter Predicate is not valid', columnFilter);
}
else {
this.addUidToAdaptableObject(columnFilter);
if (this.getColumnFilters().find((cf) => cf.ColumnId == columnFilter.ColumnId)) {
this.dispatchAction(LayoutRedux.LayoutColumnFilterSet(columnFilter));
}
else {
this.dispatchAction(LayoutRedux.LayoutColumnFilterAdd(columnFilter));
}
}
}
});
return columnFilters
?.map((columnFilter) => this.getColumnFilterById(columnFilter.Uuid))
.filter(Boolean);
}
clearColumnFilter(columnFilter) {
this.dispatchAction(LayoutRedux.LayoutColumnFilterClear(columnFilter.ColumnId));
}
clearColumnFiltersForColumns(columns) {
columns.forEach((c) => {
this.clearColumnFilterForColumn(c);
});
}
getColumnFilterForColumn(columnId) {
return this.getColumnFilters().find((columnFilter) => columnFilter.ColumnId == columnId);
}
clearColumnFilterForColumn(columnId) {
let columnFilterForColumn = this.getColumnFilterForColumn(columnId);
if (columnFilterForColumn) {
this.dispatchAction(LayoutRedux.LayoutColumnFilterClear(columnFilterForColumn.ColumnId));
this._adaptable.clearColumnFilteringForColumns([columnId]);
}
}
clearColumnFilters() {
this.dispatchAction(LayoutRedux.LayoutColumnFilterClearAll());
this._adaptable.clearColumnFiltering();
}
clearAndSetColumnFilters(columnFilters) {
this.clearColumnFilters();
this.setColumnFilters(columnFilters);
}
columnFilterToString(columnFilter) {
if (columnFilter == null) {
return 'No Column Filter';
}
const friendlyName = this.getColumnApi().getFriendlyNameForColumnId(columnFilter.ColumnId);
return ('[' +
friendlyName +
'] ' +
this.getPredicateApi().predicatesToString(columnFilter.Predicates, columnFilter.PredicatesOperator));
}
columnFiltersToString(columnFilters) {
return columnFilters.map((cf) => this.columnFilterToString(cf)).join(', ');
}
getColumnFilterById(id) {
return this.getColumnFilters()?.find((columnFilter) => columnFilter.Uuid === id);
}
isColumnFilterActiveForColumn(columnId) {
const columnFilter = this.getColumnFilterForColumn(columnId);
return columnFilter ? this.isColumnFilterActive(columnFilter) : false;
}
/**
* Checks if a filter is applied. It is applied when:
* - has no inputs
* - has inputs and inputs have values
*
* @param filter
*/
isColumnFilterActive(filter) {
if (!filter || !filter.Predicates?.length) {
return false;
}
if (filter.IsSuspended) {
return false;
}
return filter.Predicates.some((predicate) => {
const predicateDef = this.getPredicateApi().getPredicateDefById(predicate.PredicateId);
if (ArrayExtensions.IsNull(predicateDef.inputs) &&
// values predicates have no inputs in the definition
!this.getPredicateApi().internalApi.hasPredicateValues(predicate)) {
return true;
}
const inputs = predicate.Inputs || [];
if (ArrayExtensions.IsEmpty(inputs)) {
return false;
}
// all values in the array need to be non-empty (e.g. between has two values, [min, max])
const allInputsHaveValues = inputs.every((value) => {
return value !== undefined && value !== null && value !== '';
});
return allInputsHaveValues;
});
}
setColumnFilterForColumn(columnId, columnFilterPredicate) {
const columnFilter = {
ColumnId: columnId,
Predicates: [columnFilterPredicate],
};
this.setColumnFilters([columnFilter]);
}
suspendColumnFilter(columnFilter) {
this.dispatchAction(LayoutRedux.LayoutColumnFilterSuspend(columnFilter));
}
unSuspendColumnFilter(columnFilter) {
this.dispatchAction(LayoutRedux.LayoutColumnFilterUnSuspend(columnFilter));
}
suspendAllColumnFilters() {
this.dispatchAction(LayoutRedux.LayoutColumnFilterSuspendAll());
}
unSuspendAllColumnFilters() {
this.dispatchAction(LayoutRedux.LayoutColumnFilterUnSuspendAll());
}
}