@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
104 lines • 16.6 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Pipe } from '@angular/core';
import { DataUtil } from '../../data-operations/data-util';
import { GridBaseAPIService } from '../api.service';
import { BaseFilteringStrategy } from '../../data-operations/filtering-strategy';
import { FilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';
/** @hidden */
export class TreeGridFilteringStrategy extends BaseFilteringStrategy {
filter(data, expressionsTree, advancedExpressionsTree) {
return this.filterImpl(data, expressionsTree, advancedExpressionsTree, undefined);
}
filterImpl(data, expressionsTree, advancedExpressionsTree, parent) {
let i;
let rec;
const len = data.length;
const res = [];
if ((FilteringExpressionsTree.empty(expressionsTree) && FilteringExpressionsTree.empty(advancedExpressionsTree)) || !len) {
return data;
}
for (i = 0; i < len; i++) {
rec = DataUtil.cloneTreeGridRecord(data[i]);
rec.parent = parent;
if (rec.children) {
const filteredChildren = this.filterImpl(rec.children, expressionsTree, advancedExpressionsTree, rec);
rec.children = filteredChildren.length > 0 ? filteredChildren : null;
}
if (this.matchRecord(rec, expressionsTree) && this.matchRecord(rec, advancedExpressionsTree)) {
res.push(rec);
}
else if (rec.children && rec.children.length > 0) {
rec.isFilteredOutParent = true;
res.push(rec);
}
}
return res;
}
getFieldValue(rec, fieldName) {
const hierarchicalRecord = rec;
return hierarchicalRecord.data[fieldName];
}
}
/** @hidden */
let IgxTreeGridFilteringPipe = class IgxTreeGridFilteringPipe {
constructor(gridAPI) {
this.gridAPI = gridAPI;
}
transform(hierarchyData, expressionsTree, filterStrategy, advancedFilteringExpressionsTree, id, pipeTrigger) {
const grid = this.gridAPI.grid;
const state = {
expressionsTree: expressionsTree,
advancedExpressionsTree: advancedFilteringExpressionsTree,
strategy: new TreeGridFilteringStrategy()
};
if (filterStrategy) {
state.strategy = filterStrategy;
}
this.resetFilteredOutProperty(grid.records);
if (FilteringExpressionsTree.empty(state.expressionsTree) && FilteringExpressionsTree.empty(state.advancedExpressionsTree)) {
grid.filteredData = null;
return hierarchyData;
}
const result = this.filter(hierarchyData, state);
const filteredData = [];
this.expandAllRecursive(grid, result, grid.expansionStates, filteredData);
grid.filteredData = filteredData;
return result;
}
resetFilteredOutProperty(map) {
const keys = Array.from(map.keys());
for (let i = 0; i < keys.length; i++) {
map.get(keys[i]).isFilteredOutParent = undefined;
}
}
expandAllRecursive(grid, data, expandedStates, filteredData) {
for (let i = 0; i < data.length; i++) {
const rec = data[i];
filteredData.push(rec.data);
this.updateNonProcessedRecord(grid, rec);
if (rec.children && rec.children.length > 0) {
expandedStates.set(rec.rowID, true);
this.expandAllRecursive(grid, rec.children, expandedStates, filteredData);
}
}
}
updateNonProcessedRecord(grid, record) {
const rec = grid.records.get(record.rowID);
rec.isFilteredOutParent = record.isFilteredOutParent;
}
filter(data, state) {
return state.strategy.filter(data, state.expressionsTree, state.advancedExpressionsTree);
}
};
IgxTreeGridFilteringPipe.ctorParameters = () => [
{ type: GridBaseAPIService }
];
IgxTreeGridFilteringPipe = __decorate([
Pipe({
name: 'treeGridFiltering',
pure: true
}),
__metadata("design:paramtypes", [GridBaseAPIService])
], IgxTreeGridFilteringPipe);
export { IgxTreeGridFilteringPipe };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLmZpbHRlcmluZy5waXBlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy90cmVlLWdyaWQvdHJlZS1ncmlkLmZpbHRlcmluZy5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQsT0FBTyxFQUFFLHFCQUFxQixFQUFzQixNQUFNLDBDQUEwQyxDQUFDO0FBQ3JHLE9BQU8sRUFBNkIsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQU92SCxjQUFjO0FBQ2QsTUFBTSxPQUFPLHlCQUEwQixTQUFRLHFCQUFxQjtJQUN6RCxNQUFNLENBQUMsSUFBdUIsRUFBRSxlQUEwQyxFQUM3RSx1QkFBbUQ7UUFDbkQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUF1QixFQUFFLGVBQTBDLEVBQ2xGLHVCQUFrRCxFQUFFLE1BQXVCO1FBQzNFLElBQUksQ0FBUyxDQUFDO1FBQ2QsSUFBSSxHQUFvQixDQUFDO1FBQ3pCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDeEIsTUFBTSxHQUFHLEdBQXNCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLHdCQUF3QixDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDdEgsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELEtBQUssQ0FBQyxH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O0lBQ3pELENBQUM7SUFFTyxNQUFNLENBQUMsSUFBdUIsRUFBRSxLQUFzQjtRQUMxRCxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzdGLENBQUM7Q0FDSixDQUFBOztZQTlEd0Isa0JBQWtCOztBQUg5Qix3QkFBd0I7SUFKcEMsSUFBSSxDQUFDO1FBQ0YsSUFBSSxFQUFFLG1CQUFtQjtRQUN6QixJQUFJLEVBQUUsSUFBSTtLQUNiLENBQUM7cUNBSXVCLGtCQUFrQjtHQUg5Qix3QkFBd0IsQ0FpRXBDO1NBakVZLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGFVdGlsIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQgeyBHcmlkQmFzZUFQSVNlcnZpY2UgfSBmcm9tICcuLi9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hUcmVlR3JpZENvbXBvbmVudCB9IGZyb20gJy4vdHJlZS1ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCYXNlRmlsdGVyaW5nU3RyYXRlZ3ksIElGaWx0ZXJpbmdTdHJhdGVneSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctc3RyYXRlZ3knO1xuaW1wb3J0IHsgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSwgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IElGaWx0ZXJpbmdTdGF0ZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4vdHJlZS1ncmlkLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgSWd4VHJlZUdyaWRBUElTZXJ2aWNlIH0gZnJvbSAnLi90cmVlLWdyaWQtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4R3JpZEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9ncmlkJztcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcblxuLyoqIEBoaWRkZW4gKi9cbmV4cG9ydCBjbGFzcyBUcmVlR3JpZEZpbHRlcmluZ1N0cmF0ZWd5IGV4dGVuZHMgQmFzZUZpbHRlcmluZ1N0cmF0ZWd5IHtcbiAgICBwdWJsaWMgZmlsdGVyKGRhdGE6IElUcmVlR3JpZFJlY29yZFtdLCBleHByZXNzaW9uc1RyZWU6IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgIGFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlPzogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSk6IElUcmVlR3JpZFJlY29yZFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVySW1wbChkYXRhLCBleHByZXNzaW9uc1RyZWUsIGFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlLCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmlsdGVySW1wbChkYXRhOiBJVHJlZUdyaWRSZWNvcmRbXSwgZXhwcmVzc2lvbnNUcmVlOiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLFxuICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSwgcGFyZW50OiBJVHJlZUdyaWRSZWNvcmQpOiBJVHJlZUdyaWRSZWNvcmRbXSB7XG4gICAgICAgIGxldCBpOiBudW1iZXI7XG4gICAgICAgIGxldCByZWM6IElUcmVlR3JpZFJlY29yZDtcbiAgICAgICAgY29uc3QgbGVuID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlczogSVRyZWVHcmlkUmVjb3JkW10gPSBbXTtcbiAgICAgICAgaWYgKChGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZW1wdHkoZXhwcmVzc2lvbnNUcmVlKSAmJiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZW1wdHkoYWR2YW5jZWRFeHByZXNzaW9uc1RyZWUpKSB8fCAhbGVuKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHJlYyA9IERhdGFVdGlsLmNsb25lVHJlZUdyaWRSZWNvcmQoZGF0YVtpXSk7XG4gICAgICAgICAgICByZWMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICAgICAgaWYgKHJlYy5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQ2hpbGRyZW4gPSB0aGlzLmZpbHRlckltcGwocmVjLmNoaWxkcmVuLCBleHByZXNzaW9uc1RyZWUsIGFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlLCByZWMpO1xuICAgICAgICAgICAgICAgIHJlYy5jaGlsZHJlbiA9IGZpbHRlcmVkQ2hpbGRyZW4ubGVuZ3RoID4gMCA/IGZpbHRlcmVkQ2hpbGRyZW4gOiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5tYXRjaFJlY29yZChyZWMsIGV4cHJlc3Npb25zVHJlZSkgJiYgdGhpcy5tYXRjaFJlY29yZChyZWMsIGFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlKSkge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHJlYyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlYy5jaGlsZHJlbiAmJiByZWMuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJlYy5pc0ZpbHRlcmVkT3V0UGFyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXMucHVzaChyZWMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEZpZWxkVmFsdWUocmVjOiBvYmplY3QsIGZpZWxkTmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgY29uc3QgaGllcmFyY2hpY2FsUmVjb3JkID0gPElUcmVlR3JpZFJlY29yZD5yZWM7XG4gICAgICAgIHJldHVybiBoaWVyYXJjaGljYWxSZWNvcmQuZGF0YVtmaWVsZE5hbWVdO1xuICAgIH1cbn1cblxuLyoqIEBoaWRkZW4gKi9cbkBQaXBlKHtcbiAgICBuYW1lOiAndHJlZUdyaWRGaWx0ZXJpbmcnLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4VHJlZUdyaWRGaWx0ZXJpbmdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgcHJpdmF0ZSBncmlkQVBJOiBJZ3hUcmVlR3JpZEFQSVNlcnZpY2U7XG5cbiAgICBjb25zdHJ1Y3RvcihncmlkQVBJOiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4pIHtcbiAgICAgICAgdGhpcy5ncmlkQVBJID0gPElneFRyZWVHcmlkQVBJU2VydmljZT5ncmlkQVBJO1xuICAgICB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGhpZXJhcmNoeURhdGE6IElUcmVlR3JpZFJlY29yZFtdLCBleHByZXNzaW9uc1RyZWU6IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgIGZpbHRlclN0cmF0ZWd5OiBJRmlsdGVyaW5nU3RyYXRlZ3ksXG4gICAgICAgIGFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlOiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLCBpZDogc3RyaW5nLCBwaXBlVHJpZ2dlcjogbnVtYmVyKTogSVRyZWVHcmlkUmVjb3JkW10ge1xuICAgICAgICBjb25zdCBncmlkOiBJZ3hUcmVlR3JpZENvbXBvbmVudCA9IHRoaXMuZ3JpZEFQSS5ncmlkO1xuICAgICAgICBjb25zdCBzdGF0ZTogSUZpbHRlcmluZ1N0YXRlID0ge1xuICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlOiBleHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICBhZHZhbmNlZEV4cHJlc3Npb25zVHJlZTogYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsXG4gICAgICAgICAgICBzdHJhdGVneTogbmV3IFRyZWVHcmlkRmlsdGVyaW5nU3RyYXRlZ3koKVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChmaWx0ZXJTdHJhdGVneSkge1xuICAgICAgICAgICAgc3RhdGUuc3RyYXRlZ3kgPSBmaWx0ZXJTdHJhdGVneTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVzZXRGaWx0ZXJlZE91dFByb3BlcnR5KGdyaWQucmVjb3Jkcyk7XG5cbiAgICAgICAgaWYgKEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5lbXB0eShzdGF0ZS5leHByZXNzaW9uc1RyZWUpICYmIEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5lbXB0eShzdGF0ZS5hZHZhbmNlZEV4cHJlc3Npb25zVHJlZSkpIHtcbiAgICAgICAgICAgIGdyaWQuZmlsdGVyZWREYXRhID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBoaWVyYXJjaHlEYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maWx0ZXIoaGllcmFyY2h5RGF0YSwgc3RhdGUpO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZERhdGE6IGFueVtdID0gW107XG4gICAgICAgIHRoaXMuZXhwYW5kQWxsUmVjdXJzaXZlKGdyaWQsIHJlc3VsdCwgZ3JpZC5leHBhbnNpb25TdGF0ZXMsIGZpbHRlcmVkRGF0YSk7XG4gICAgICAgIGdyaWQuZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldEZpbHRlcmVkT3V0UHJvcGVydHkobWFwOiBNYXA8YW55LCBJVHJlZUdyaWRSZWNvcmQ+KSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBBcnJheS5mcm9tKG1hcC5rZXlzKCkpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG1hcC5nZXQoa2V5c1tpXSkuaXNGaWx0ZXJlZE91dFBhcmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZXhwYW5kQWxsUmVjdXJzaXZlKGdyaWQ6IElneFRyZWVHcmlkQ29tcG9uZW50LCBkYXRhOiBJVHJlZUdyaWRSZWNvcmRbXSxcbiAgICAgICAgZXhwYW5kZWRTdGF0ZXM6IE1hcDxhbnksIGJvb2xlYW4+LCBmaWx0ZXJlZERhdGE6IGFueVtdKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcmVjID0gZGF0YVtpXTtcbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YS5wdXNoKHJlYy5kYXRhKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTm9uUHJvY2Vzc2VkUmVjb3JkKGdyaWQsIHJlYyk7XG5cbiAgICAgICAgICAgIGlmIChyZWMuY2hpbGRyZW4gJiYgcmVjLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBleHBhbmRlZFN0YXRlcy5zZXQocmVjLnJvd0lELCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEFsbFJlY3Vyc2l2ZShncmlkLCByZWMuY2hpbGRyZW4sIGV4cGFuZGVkU3RhdGVzLCBmaWx0ZXJlZERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVOb25Qcm9jZXNzZWRSZWNvcmQoZ3JpZDogSWd4VHJlZUdyaWRDb21wb25lbnQsIHJlY29yZDogSVRyZWVHcmlkUmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IHJlYyA9IGdyaWQucmVjb3Jkcy5nZXQocmVjb3JkLnJvd0lEKTtcbiAgICAgICAgcmVjLmlzRmlsdGVyZWRPdXRQYXJlbnQgPSByZWNvcmQuaXNGaWx0ZXJlZE91dFBhcmVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbHRlcihkYXRhOiBJVHJlZUdyaWRSZWNvcmRbXSwgc3RhdGU6IElGaWx0ZXJpbmdTdGF0ZSk6IElUcmVlR3JpZFJlY29yZFtdIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnN0cmF0ZWd5LmZpbHRlcihkYXRhLCBzdGF0ZS5leHByZXNzaW9uc1RyZWUsIHN0YXRlLmFkdmFuY2VkRXhwcmVzc2lvbnNUcmVlKTtcbiAgICB9XG59XG4iXX0=