UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

104 lines 16.6 kB
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=