UNPKG

@taiga-ui/addon-table

Version:

A library to display tabled data with filters, search, group actions, etc.

118 lines (109 loc) 5.83 kB
import * as i0 from '@angular/core'; import { input, Directive, inject, computed, Pipe } from '@angular/core'; import { TUI_TRUE_HANDLER } from '@taiga-ui/cdk/constants'; import { tuiProvide } from '@taiga-ui/cdk/utils/di'; import { NgControl } from '@angular/forms'; import { TuiTableHead } from '@taiga-ui/addon-table/components/table'; import { ReplaySubject, switchMap, identity, startWith, map, merge, defer, EMPTY, distinctUntilChanged } from 'rxjs'; class AbstractTuiTableFilter { } class TuiGenericFilter extends AbstractTuiTableFilter { constructor() { super(...arguments); this.filter = input(TUI_TRUE_HANDLER, { alias: 'tuiGenericFilter', }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: TuiGenericFilter, deps: null, target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.21", type: TuiGenericFilter, isStandalone: true, selector: "[tuiGenericFilter]", inputs: { filter: { classPropertyName: "filter", publicName: "tuiGenericFilter", isSignal: true, isRequired: false, transformFunction: null } }, providers: [tuiProvide(AbstractTuiTableFilter, TuiGenericFilter)], usesInheritance: true, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: TuiGenericFilter, decorators: [{ type: Directive, args: [{ selector: '[tuiGenericFilter]', providers: [tuiProvide(AbstractTuiTableFilter, TuiGenericFilter)], }] }] }); class TuiTableFiltersDirective { constructor() { this.refresh$ = new ReplaySubject(1); this.filters = []; } register(filter) { this.filters = this.filters.concat(filter); this.update(); } unregister(filter) { this.filters = this.filters.filter((item) => item !== filter); this.update(); } filter(items) { return this.refresh$.pipe(switchMap(identity), startWith(null), map(() => items.filter((item) => this.check(item)))); } check(item) { return this.filters.every((filter) => filter.filter(item)); } update() { this.refresh$.next(merge(...this.filters.map(({ refresh$ }) => refresh$))); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: TuiTableFiltersDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.21", type: TuiTableFiltersDirective, isStandalone: true, selector: "[tuiTableFilters]", ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: TuiTableFiltersDirective, decorators: [{ type: Directive, args: [{ selector: '[tuiTableFilters]' }] }] }); class TuiTableFilterDirective { constructor() { this.head = inject((TuiTableHead), { optional: true }); this.delegate = inject((AbstractTuiTableFilter)); this.control = inject(NgControl); this.filters = inject((TuiTableFiltersDirective)); this.key = computed(() => this.tuiTableFilter() || this.head?.tuiHead()); this.tuiTableFilter = input(); this.refresh$ = defer(() => merge(this.control.valueChanges || EMPTY, this.control.statusChanges?.pipe(distinctUntilChanged()) || EMPTY)); } ngOnInit() { this.filters.register(this); } ngOnDestroy() { this.filters.unregister(this); } filter(item) { const { disabled, value } = this.control; return (!!disabled || !this.key() || this.delegate.filter()(item[this.key()], value)); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: TuiTableFilterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.21", type: TuiTableFilterDirective, isStandalone: true, selector: "[tuiTableFilter]", inputs: { tuiTableFilter: { classPropertyName: "tuiTableFilter", publicName: "tuiTableFilter", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: TuiTableFilterDirective, decorators: [{ type: Directive, args: [{ selector: '[tuiTableFilter]' }] }] }); class TuiTableFiltersPipe { constructor() { this.filters = inject((TuiTableFiltersDirective)); } transform(items) { return this.filters.filter(items); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: TuiTableFiltersPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); } static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.21", ngImport: i0, type: TuiTableFiltersPipe, isStandalone: true, name: "tuiTableFilters" }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: TuiTableFiltersPipe, decorators: [{ type: Pipe, args: [{ name: 'tuiTableFilters' }] }] }); const TuiTableFilters = [ TuiTableFiltersDirective, TuiTableFilterDirective, TuiTableFiltersPipe, TuiGenericFilter, ]; /** * Generated bundle index. Do not edit. */ export { AbstractTuiTableFilter, TuiGenericFilter, TuiTableFilterDirective, TuiTableFilters, TuiTableFiltersDirective, TuiTableFiltersPipe }; //# sourceMappingURL=taiga-ui-addon-table-directives-table-filters.mjs.map