ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
109 lines • 18.5 kB
JavaScript
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
import { Injectable } from '@angular/core';
import { BehaviorSubject, Subject, combineLatest } from 'rxjs';
import { debounceTime, distinctUntilChanged, filter, map, skip, switchMap, takeUntil } from 'rxjs/operators';
import * as i0 from "@angular/core";
export class NzTableDataService {
updatePageSize(size) {
this.pageSize$.next(size);
}
updateFrontPagination(pagination) {
this.frontPagination$.next(pagination);
}
updatePageIndex(index) {
this.pageIndex$.next(index);
}
updateListOfData(list) {
this.listOfData$.next(list);
}
updateListOfCustomColumn(list) {
this.listOfCustomColumn$.next(list);
}
constructor() {
this.destroy$ = new Subject();
this.pageIndex$ = new BehaviorSubject(1);
this.frontPagination$ = new BehaviorSubject(true);
this.pageSize$ = new BehaviorSubject(10);
this.listOfData$ = new BehaviorSubject([]);
this.listOfCustomColumn$ = new BehaviorSubject([]);
this.pageIndexDistinct$ = this.pageIndex$.pipe(distinctUntilChanged());
this.pageSizeDistinct$ = this.pageSize$.pipe(distinctUntilChanged());
this.listOfCalcOperator$ = new BehaviorSubject([]);
this.queryParams$ = combineLatest([
this.pageIndexDistinct$,
this.pageSizeDistinct$,
this.listOfCalcOperator$
]).pipe(debounceTime(0), skip(1), map(([pageIndex, pageSize, listOfCalc]) => ({
pageIndex,
pageSize,
sort: listOfCalc
.filter(item => item.sortFn)
.map(item => ({
key: item.key,
value: item.sortOrder
})),
filter: listOfCalc
.filter(item => item.filterFn)
.map(item => ({
key: item.key,
value: item.filterValue
}))
})));
this.listOfDataAfterCalc$ = combineLatest([this.listOfData$, this.listOfCalcOperator$]).pipe(map(([listOfData, listOfCalcOperator]) => {
let listOfDataAfterCalc = [...listOfData];
const listOfFilterOperator = listOfCalcOperator.filter(item => {
const { filterValue, filterFn } = item;
const isReset = filterValue === null ||
filterValue === undefined ||
(Array.isArray(filterValue) && filterValue.length === 0);
return !isReset && typeof filterFn === 'function';
});
for (const item of listOfFilterOperator) {
const { filterFn, filterValue } = item;
listOfDataAfterCalc = listOfDataAfterCalc.filter(data => filterFn(filterValue, data));
}
const listOfSortOperator = listOfCalcOperator
.filter(item => item.sortOrder !== null && typeof item.sortFn === 'function')
.sort((a, b) => +b.sortPriority - +a.sortPriority);
if (listOfCalcOperator.length) {
listOfDataAfterCalc.sort((record1, record2) => {
for (const item of listOfSortOperator) {
const { sortFn, sortOrder } = item;
if (sortFn && sortOrder) {
const compareResult = sortFn(record1, record2, sortOrder);
if (compareResult !== 0) {
return sortOrder === 'ascend' ? compareResult : -compareResult;
}
}
}
return 0;
});
}
return listOfDataAfterCalc;
}));
this.listOfFrontEndCurrentPageData$ = combineLatest([
this.pageIndexDistinct$,
this.pageSizeDistinct$,
this.listOfDataAfterCalc$
]).pipe(takeUntil(this.destroy$), filter(value => {
const [pageIndex, pageSize, listOfData] = value;
const maxPageIndex = Math.ceil(listOfData.length / pageSize) || 1;
return pageIndex <= maxPageIndex;
}), map(([pageIndex, pageSize, listOfData]) => listOfData.slice((pageIndex - 1) * pageSize, pageIndex * pageSize)));
this.listOfCurrentPageData$ = this.frontPagination$.pipe(switchMap(pagination => (pagination ? this.listOfFrontEndCurrentPageData$ : this.listOfDataAfterCalc$)));
this.total$ = this.frontPagination$.pipe(switchMap(pagination => (pagination ? this.listOfDataAfterCalc$ : this.listOfData$)), map(list => list.length), distinctUntilChanged());
}
ngOnDestroy() {
this.destroy$.next(true);
this.destroy$.complete();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: NzTableDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: NzTableDataService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: NzTableDataService, decorators: [{
type: Injectable
}], ctorParameters: () => [] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29tcG9uZW50cy90YWJsZS9zcmMvdGFibGUtZGF0YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQVk3RyxNQUFNLE9BQU8sa0JBQWtCO0lBb0c3QixjQUFjLENBQUMsSUFBWTtRQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QscUJBQXFCLENBQUMsVUFBbUI7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUNELGdCQUFnQixDQUFDLElBQWtCO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDRCx3QkFBd0IsQ0FBQyxJQUFzQjtRQUM3QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRDtRQWxIUSxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUNsQyxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFD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LENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7OEdBdkhVLGtCQUFrQjtrSEFBbEIsa0JBQWtCOzsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBza2lwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgTnpDdXN0b21Db2x1bW4sXG4gIE56VGFibGVGaWx0ZXJGbixcbiAgTnpUYWJsZUZpbHRlclZhbHVlLFxuICBOelRhYmxlUXVlcnlQYXJhbXMsXG4gIE56VGFibGVTb3J0Rm4sXG4gIE56VGFibGVTb3J0T3JkZXJcbn0gZnJvbSAnLi90YWJsZS50eXBlcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOelRhYmxlRGF0YVNlcnZpY2U8VD4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSBwYWdlSW5kZXgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDEpO1xuICBwcml2YXRlIGZyb250UGFnaW5hdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwcml2YXRlIHBhZ2VTaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigxMCk7XG4gIHByaXZhdGUgbGlzdE9mRGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHJlYWRvbmx5IFRbXT4oW10pO1xuICBsaXN0T2ZDdXN0b21Db2x1bW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOekN1c3RvbUNvbHVtbltdPihbXSk7XG4gIHBhZ2VJbmRleERpc3RpbmN0JCA9IHRoaXMucGFnZUluZGV4JC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICBwYWdlU2l6ZURpc3RpbmN0JCA9IHRoaXMucGFnZVNpemUkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gIGxpc3RPZkNhbGNPcGVyYXRvciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIEFycmF5PHtcbiAgICAgIGtleT86IHN0cmluZztcbiAgICAgIHNvcnRGbjogTnpUYWJsZVNvcnRGbjxUPiB8IG51bGwgfCBib29sZWFuO1xuICAgICAgc29ydE9yZGVyOiBOelRhYmxlU29ydE9yZGVyO1xuICAgICAgZmlsdGVyRm46IE56VGFibGVGaWx0ZXJGbjxUPiB8IG51bGwgfCBib29sZWFuO1xuICAgICAgZmlsdGVyVmFsdWU6IE56VGFibGVGaWx0ZXJWYWx1ZTtcbiAgICAgIHNvcnRQcmlvcml0eTogbnVtYmVyIHwgYm9vbGVhbjtcbiAgICB9PlxuICA+KFtdKTtcbiAgcXVlcnlQYXJhbXMkOiBPYnNlcnZhYmxlPE56VGFibGVRdWVyeVBhcmFtcz4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLnBhZ2VJbmRleERpc3RpbmN0JCxcbiAgICB0aGlzLnBhZ2VTaXplRGlzdGluY3QkLFxuICAgIHRoaXMubGlzdE9mQ2FsY09wZXJhdG9yJFxuICBdKS5waXBlKFxuICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICBza2lwKDEpLFxuICAgIG1hcCgoW3BhZ2VJbmRleCwgcGFnZVNpemUsIGxpc3RPZkNhbGNdKSA9PiAoe1xuICAgICAgcGFnZUluZGV4LFxuICAgICAgcGFnZVNpemUsXG4gICAgICBzb3J0OiBsaXN0T2ZDYWxjXG4gICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnNvcnRGbilcbiAgICAgICAgLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAga2V5OiBpdGVtLmtleSEsXG4gICAgICAgICAgdmFsdWU6IGl0ZW0uc29ydE9yZGVyXG4gICAgICAgIH0pKSxcbiAgICAgIGZpbHRlcjogbGlzdE9mQ2FsY1xuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5maWx0ZXJGbilcbiAgICAgICAgLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAga2V5OiBpdGVtLmtleSEsXG4gICAgICAgICAgdmFsdWU6IGl0ZW0uZmlsdGVyVmFsdWVcbiAgICAgICAgfSkpXG4gICAgfSkpXG4gICk7XG4gIHByaXZhdGUgbGlzdE9mRGF0YUFmdGVyQ2FsYyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmxpc3RPZkRhdGEkLCB0aGlzLmxpc3RPZkNhbGNPcGVyYXRvciRdKS5waXBlKFxuICAgIG1hcCgoW2xpc3RPZkRhdGEsIGxpc3RPZkNhbGNPcGVyYXRvcl0pID0+IHtcbiAgICAgIGxldCBsaXN0T2ZEYXRhQWZ0ZXJDYWxjID0gWy4uLmxpc3RPZkRhdGFdO1xuICAgICAgY29uc3QgbGlzdE9mRmlsdGVyT3BlcmF0b3IgPSBsaXN0T2ZDYWxjT3BlcmF0b3IuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCB7IGZpbHRlclZhbHVlLCBmaWx0ZXJGbiB9ID0gaXRlbTtcbiAgICAgICAgY29uc3QgaXNSZXNldCA9XG4gICAgICAgICAgZmlsdGVyVmFsdWUgPT09IG51bGwgfHxcbiAgICAgICAgICBmaWx0ZXJWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgKEFycmF5LmlzQXJyYXkoZmlsdGVyVmFsdWUpICYmIGZpbHRlclZhbHVlIS5sZW5ndGggPT09IDApO1xuICAgICAgICByZXR1cm4gIWlzUmVzZXQgJiYgdHlwZW9mIGZpbHRlckZuID09PSAnZnVuY3Rpb24nO1xuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdE9mRmlsdGVyT3BlcmF0b3IpIHtcbiAgICAgICAgY29uc3QgeyBmaWx0ZXJGbiwgZmlsdGVyVmFsdWUgfSA9IGl0ZW07XG4gICAgICAgIGxpc3RPZkRhdGFBZnRlckNhbGMgPSBsaXN0T2ZEYXRhQWZ0ZXJDYWxjLmZpbHRlcihkYXRhID0+IChmaWx0ZXJGbiBhcyBOelRhYmxlRmlsdGVyRm48VD4pKGZpbHRlclZhbHVlLCBkYXRhKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBsaXN0T2ZTb3J0T3BlcmF0b3IgPSBsaXN0T2ZDYWxjT3BlcmF0b3JcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0uc29ydE9yZGVyICE9PSBudWxsICYmIHR5cGVvZiBpdGVtLnNvcnRGbiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+ICtiLnNvcnRQcmlvcml0eSAtICthLnNvcnRQcmlvcml0eSk7XG4gICAgICBpZiAobGlzdE9mQ2FsY09wZXJhdG9yLmxlbmd0aCkge1xuICAgICAgICBsaXN0T2ZEYXRhQWZ0ZXJDYWxjLnNvcnQoKHJlY29yZDEsIHJlY29yZDIpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdE9mU29ydE9wZXJhdG9yKSB7XG4gICAgICAgICAgICBjb25zdCB7IHNvcnRGbiwgc29ydE9yZGVyIH0gPSBpdGVtO1xuICAgICAgICAgICAgaWYgKHNvcnRGbiAmJiBzb3J0T3JkZXIpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29tcGFyZVJlc3VsdCA9IChzb3J0Rm4gYXMgTnpUYWJsZVNvcnRGbjxUPikocmVjb3JkMSwgcmVjb3JkMiwgc29ydE9yZGVyKTtcbiAgICAgICAgICAgICAgaWYgKGNvbXBhcmVSZXN1bHQgIT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc29ydE9yZGVyID09PSAnYXNjZW5kJyA/IGNvbXBhcmVSZXN1bHQgOiAtY29tcGFyZVJlc3VsdDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdE9mRGF0YUFmdGVyQ2FsYztcbiAgICB9KVxuICApO1xuICBwcml2YXRlIGxpc3RPZkZyb250RW5kQ3VycmVudFBhZ2VEYXRhJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMucGFnZUluZGV4RGlzdGluY3QkLFxuICAgIHRoaXMucGFnZVNpemVEaXN0aW5jdCQsXG4gICAgdGhpcy5saXN0T2ZEYXRhQWZ0ZXJDYWxjJFxuICBdKS5waXBlKFxuICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICBmaWx0ZXIodmFsdWUgPT4ge1xuICAgICAgY29uc3QgW3BhZ2VJbmRleCwgcGFnZVNpemUsIGxpc3RPZkRhdGFdID0gdmFsdWU7XG4gICAgICBjb25zdCBtYXhQYWdlSW5kZXggPSBNYXRoLmNlaWwobGlzdE9mRGF0YS5sZW5ndGggLyBwYWdlU2l6ZSkgfHwgMTtcbiAgICAgIHJldHVybiBwYWdlSW5kZXggPD0gbWF4UGFnZUluZGV4O1xuICAgIH0pLFxuICAgIG1hcCgoW3BhZ2VJbmRleCwgcGFnZVNpemUsIGxpc3RPZkRhdGFdKSA9PiBsaXN0T2ZEYXRhLnNsaWNlKChwYWdlSW5kZXggLSAxKSAqIHBhZ2VTaXplLCBwYWdlSW5kZXggKiBwYWdlU2l6ZSkpXG4gICk7XG4gIGxpc3RPZkN1cnJlbnRQYWdlRGF0YSQgPSB0aGlzLmZyb250UGFnaW5hdGlvbiQucGlwZShcbiAgICBzd2l0Y2hNYXAocGFnaW5hdGlvbiA9PiAocGFnaW5hdGlvbiA/IHRoaXMubGlzdE9mRnJvbnRFbmRDdXJyZW50UGFnZURhdGEkIDogdGhpcy5saXN0T2ZEYXRhQWZ0ZXJDYWxjJCkpXG4gICk7XG4gIHRvdGFsJCA9IHRoaXMuZnJvbnRQYWdpbmF0aW9uJC5waXBlKFxuICAgIHN3aXRjaE1hcChwYWdpbmF0aW9uID0+IChwYWdpbmF0aW9uID8gdGhpcy5saXN0T2ZEYXRhQWZ0ZXJDYWxjJCA6IHRoaXMubGlzdE9mRGF0YSQpKSxcbiAgICBtYXAobGlzdCA9PiBsaXN0Lmxlbmd0aCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICApO1xuXG4gIHVwZGF0ZVBhZ2VTaXplKHNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnZVNpemUkLm5leHQoc2l6ZSk7XG4gIH1cbiAgdXBkYXRlRnJvbnRQYWdpbmF0aW9uKHBhZ2luYXRpb246IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmZyb250UGFnaW5hdGlvbiQubmV4dChwYWdpbmF0aW9uKTtcbiAgfVxuICB1cGRhdGVQYWdlSW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnZUluZGV4JC5uZXh0KGluZGV4KTtcbiAgfVxuICB1cGRhdGVMaXN0T2ZEYXRhKGxpc3Q6IHJlYWRvbmx5IFRbXSk6IHZvaWQge1xuICAgIHRoaXMubGlzdE9mRGF0YSQubmV4dChsaXN0KTtcbiAgfVxuICB1cGRhdGVMaXN0T2ZDdXN0b21Db2x1bW4obGlzdDogTnpDdXN0b21Db2x1bW5bXSk6IHZvaWQge1xuICAgIHRoaXMubGlzdE9mQ3VzdG9tQ29sdW1uJC5uZXh0KGxpc3QpO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19