UNPKG

@intzi1992/mat-table-filter

Version:

Provides filtering support for @angular/material tables

82 lines 9.84 kB
import { Directive, Input, Host, Self, Optional } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import { debounceTime } from 'rxjs/operators'; import { MatTableFilter } from './mat-table-filter.enum'; import * as i0 from "@angular/core"; import * as i1 from "./services/mat-table-filter.service"; import * as i2 from "@angular/material/table"; export class MatTableFilterDirective { constructor(_filterService, _table) { this._filterService = _filterService; this._table = _table; /** * in millis */ this.debounceTime = 400; this.filterType = MatTableFilter.ANYWHERE; this.caseSensitive = false; this.initDebounceSubject(); } ngDoCheck() { if (this._filterService.isChanged(this._oldExampleEntity, this.exampleEntity)) { this._oldExampleEntity = this._filterService.toPlainJson(this.exampleEntity); this._exampleEntitySubject.next(undefined); } } initDebounceSubject() { this._exampleEntitySubject = new BehaviorSubject(undefined); this._exampleEntitySubject.pipe(debounceTime(this.debounceTime)) .subscribe(_ => { this.updateFilterPredicate(); }); } updateFilterPredicate() { const matDataSource = this.getMatDataSource(); if (matDataSource) { matDataSource.filterPredicate = this.getFilterPredicate(); matDataSource.filter = this.exampleEntity; } } getFilterPredicate() { if (this.customPredicate) { return this.customPredicate; } else { return (item) => { return this._filterService.filterPredicate({ example: this.exampleEntity, item }, this.propertyOptions, { filterType: this.filterType, caseSensitive: this.caseSensitive }); }; } } getMatDataSource() { const matTable = this._table; return matTable.dataSource; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MatTableFilterDirective, deps: [{ token: i1.MatTableFilterService }, { token: i2.MatTable, host: true, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: MatTableFilterDirective, selector: "[matTableFilter]", inputs: { exampleEntity: "exampleEntity", debounceTime: "debounceTime", filterType: "filterType", caseSensitive: "caseSensitive", customPredicate: "customPredicate", propertyOptions: "propertyOptions" }, exportAs: ["matTableFilter"], ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MatTableFilterDirective, decorators: [{ type: Directive, args: [{ selector: '[matTableFilter]', exportAs: 'matTableFilter' }] }], ctorParameters: () => [{ type: i1.MatTableFilterService }, { type: i2.MatTable, decorators: [{ type: Host }, { type: Self }, { type: Optional }] }], propDecorators: { exampleEntity: [{ type: Input }], debounceTime: [{ type: Input }], filterType: [{ type: Input }], caseSensitive: [{ type: Input }], customPredicate: [{ type: Input }], propertyOptions: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LXRhYmxlLWZpbHRlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXQtdGFibGUtZmlsdGVyL3NyYy9saWIvbWF0LXRhYmxlLWZpbHRlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBVyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7O0FBT3pELE1BQU0sT0FBTyx1QkFBdUI7SUFnQmxDLFlBQ1UsY0FBcUMsRUFDVCxNQUFxQjtRQURqRCxtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7UUFDVCxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBYjNEOztXQUVHO1FBQ00saUJBQVksR0FBRyxHQUFHLENBQUM7UUFDbkIsZUFBVSxHQUFtQixjQUFjLENBQUMsUUFBUSxDQUFDO1FBQ3JELGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBVTdCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDOUUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM3RSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBR08sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBTyxTQUFTLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUM3QixZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQy9CLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNiLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLGFBQWEsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUQsYUFBYSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBb0IsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsSUFBUyxFQUFXLEVBQUU7Z0JBQzVCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUNwRyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUN4RSxDQUFDLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBdUIsQ0FBQztRQUM5QyxPQUFRLFFBQVEsQ0FBQyxVQUFzQyxDQUFDO0lBQzFELENBQUM7K0dBOURVLHVCQUF1QjttR0FBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQUpuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFFBQVEsRUFBRSxnQkFBZ0I7aUJBQzNCOzswQkFtQkksSUFBSTs7MEJBQUksSUFBSTs7MEJBQUksUUFBUTt5Q0FmbEIsYUFBYTtzQkFBckIsS0FBSztnQkFLRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9wZXJ0eU9wdGlvbnMgfSBmcm9tICcuL3Byb3BlcnR5LW9wdGlvbnMnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBEb0NoZWNrLCBJbnB1dCwgSG9zdCwgU2VsZiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFRhYmxlLCBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1hdFRhYmxlRmlsdGVyIH0gZnJvbSAnLi9tYXQtdGFibGUtZmlsdGVyLmVudW0nO1xuaW1wb3J0IHsgTWF0VGFibGVGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9tYXQtdGFibGUtZmlsdGVyLnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbWF0VGFibGVGaWx0ZXJdJyxcbiAgZXhwb3J0QXM6ICdtYXRUYWJsZUZpbHRlcidcbn0pXG5leHBvcnQgY2xhc3MgTWF0VGFibGVGaWx0ZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBEb0NoZWNrIHtcbiAgcHJpdmF0ZSBfb2xkRXhhbXBsZUVudGl0eTogYW55O1xuXG4gIEBJbnB1dCgpIGV4YW1wbGVFbnRpdHk6IGFueTtcblxuICAvKipcbiAgICogaW4gbWlsbGlzXG4gICAqL1xuICBASW5wdXQoKSBkZWJvdW5jZVRpbWUgPSA0MDA7XG4gIEBJbnB1dCgpIGZpbHRlclR5cGU6IE1hdFRhYmxlRmlsdGVyID0gTWF0VGFibGVGaWx0ZXIuQU5ZV0hFUkU7XG4gIEBJbnB1dCgpIGNhc2VTZW5zaXRpdmUgPSBmYWxzZTtcbiAgQElucHV0KCkgY3VzdG9tUHJlZGljYXRlOiAoZGF0YTogYW55KSA9PiBib29sZWFuO1xuICBASW5wdXQoKSBwcm9wZXJ0eU9wdGlvbnM6IFByb3BlcnR5T3B0aW9ucztcbiAgcHJpdmF0ZSBfZXhhbXBsZUVudGl0eVN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDx2b2lkPjtcblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2ZpbHRlclNlcnZpY2U6IE1hdFRhYmxlRmlsdGVyU2VydmljZSxcbiAgICBASG9zdCgpIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfdGFibGU6IE1hdFRhYmxlPGFueT5cbiAgKSB7XG4gICAgdGhpcy5pbml0RGVib3VuY2VTdWJqZWN0KCk7XG4gIH1cblxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2ZpbHRlclNlcnZpY2UuaXNDaGFuZ2VkKHRoaXMuX29sZEV4YW1wbGVFbnRpdHksIHRoaXMuZXhhbXBsZUVudGl0eSkpIHtcbiAgICAgIHRoaXMuX29sZEV4YW1wbGVFbnRpdHkgPSB0aGlzLl9maWx0ZXJTZXJ2aWNlLnRvUGxhaW5Kc29uKHRoaXMuZXhhbXBsZUVudGl0eSk7XG4gICAgICB0aGlzLl9leGFtcGxlRW50aXR5U3ViamVjdC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cblxuICBwcml2YXRlIGluaXREZWJvdW5jZVN1YmplY3QoKSB7XG4gICAgdGhpcy5fZXhhbXBsZUVudGl0eVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHZvaWQ+KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5fZXhhbXBsZUVudGl0eVN1YmplY3QucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSkpXG4gICAgICAuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlclByZWRpY2F0ZSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZpbHRlclByZWRpY2F0ZSgpIHtcbiAgICBjb25zdCBtYXREYXRhU291cmNlID0gdGhpcy5nZXRNYXREYXRhU291cmNlKCk7XG4gICAgaWYgKG1hdERhdGFTb3VyY2UpIHtcbiAgICAgIG1hdERhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlID0gdGhpcy5nZXRGaWx0ZXJQcmVkaWNhdGUoKTtcbiAgICAgIG1hdERhdGFTb3VyY2UuZmlsdGVyID0gdGhpcy5leGFtcGxlRW50aXR5IGFzIGFueTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEZpbHRlclByZWRpY2F0ZSgpIHtcbiAgICBpZiAodGhpcy5jdXN0b21QcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1c3RvbVByZWRpY2F0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChpdGVtOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlclNlcnZpY2UuZmlsdGVyUHJlZGljYXRlKHsgZXhhbXBsZTogdGhpcy5leGFtcGxlRW50aXR5LCBpdGVtIH0sIHRoaXMucHJvcGVydHlPcHRpb25zLFxuICAgICAgICAgIHsgZmlsdGVyVHlwZTogdGhpcy5maWx0ZXJUeXBlLCBjYXNlU2Vuc2l0aXZlOiB0aGlzLmNhc2VTZW5zaXRpdmUgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWF0RGF0YVNvdXJjZSgpOiBNYXRUYWJsZURhdGFTb3VyY2U8YW55PiB7XG4gICAgY29uc3QgbWF0VGFibGUgPSB0aGlzLl90YWJsZSBhcyBNYXRUYWJsZTxhbnk+O1xuICAgIHJldHVybiAobWF0VGFibGUuZGF0YVNvdXJjZSBhcyBNYXRUYWJsZURhdGFTb3VyY2U8YW55Pik7XG4gIH1cblxufVxuIl19