ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
109 lines • 18.4 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: "17.0.7", ngImport: i0, type: NzTableDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: NzTableDataService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: NzTableDataService, decorators: [{
type: Injectable
}], ctorParameters: () => [] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29tcG9uZW50cy90YWJsZS9zcmMvdGFibGUtZGF0YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQVk3RyxNQUFNLE9BQU8sa0JBQWtCO0lBb0c3QixjQUFjLENBQUMsSUFBWTtRQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QscUJBQXFCLENBQUMsVUFBbUI7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUNELGdCQUFnQixDQUFDLElBQWtCO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDRCx3QkFBd0IsQ0FBQyxJQUFzQjtRQUM3QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRDtRQWxIUSxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUNsQyxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFD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QztJQUMzQixDQUFDOzhHQXZIVSxrQkFBa0I7a0hBQWxCLGtCQUFrQjs7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2tpcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gIE56Q3VzdG9tQ29sdW1uLFxuICBOelRhYmxlRmlsdGVyRm4sXG4gIE56VGFibGVGaWx0ZXJWYWx1ZSxcbiAgTnpUYWJsZVF1ZXJ5UGFyYW1zLFxuICBOelRhYmxlU29ydEZuLFxuICBOelRhYmxlU29ydE9yZGVyXG59IGZyb20gJy4vdGFibGUudHlwZXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTnpUYWJsZURhdGFTZXJ2aWNlPFQ+IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgcGFnZUluZGV4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigxKTtcbiAgcHJpdmF0ZSBmcm9udFBhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHJpdmF0ZSBwYWdlU2l6ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMTApO1xuICBwcml2YXRlIGxpc3RPZkRhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxyZWFkb25seSBUW10+KFtdKTtcbiAgbGlzdE9mQ3VzdG9tQ29sdW1uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TnpDdXN0b21Db2x1bW5bXT4oW10pO1xuICBwYWdlSW5kZXhEaXN0aW5jdCQgPSB0aGlzLnBhZ2VJbmRleCQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgcGFnZVNpemVEaXN0aW5jdCQgPSB0aGlzLnBhZ2VTaXplJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICBsaXN0T2ZDYWxjT3BlcmF0b3IkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBBcnJheTx7XG4gICAgICBrZXk/OiBzdHJpbmc7XG4gICAgICBzb3J0Rm46IE56VGFibGVTb3J0Rm48VD4gfCBudWxsIHwgYm9vbGVhbjtcbiAgICAgIHNvcnRPcmRlcjogTnpUYWJsZVNvcnRPcmRlcjtcbiAgICAgIGZpbHRlckZuOiBOelRhYmxlRmlsdGVyRm48VD4gfCBudWxsIHwgYm9vbGVhbjtcbiAgICAgIGZpbHRlclZhbHVlOiBOelRhYmxlRmlsdGVyVmFsdWU7XG4gICAgICBzb3J0UHJpb3JpdHk6IG51bWJlciB8IGJvb2xlYW47XG4gICAgfT5cbiAgPihbXSk7XG4gIHF1ZXJ5UGFyYW1zJDogT2JzZXJ2YWJsZTxOelRhYmxlUXVlcnlQYXJhbXM+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5wYWdlSW5kZXhEaXN0aW5jdCQsXG4gICAgdGhpcy5wYWdlU2l6ZURpc3RpbmN0JCxcbiAgICB0aGlzLmxpc3RPZkNhbGNPcGVyYXRvciRcbiAgXSkucGlwZShcbiAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgc2tpcCgxKSxcbiAgICBtYXAoKFtwYWdlSW5kZXgsIHBhZ2VTaXplLCBsaXN0T2ZDYWxjXSkgPT4gKHtcbiAgICAgIHBhZ2VJbmRleCxcbiAgICAgIHBhZ2VTaXplLFxuICAgICAgc29ydDogbGlzdE9mQ2FsY1xuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zb3J0Rm4pXG4gICAgICAgIC5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgIGtleTogaXRlbS5rZXkhLFxuICAgICAgICAgIHZhbHVlOiBpdGVtLnNvcnRPcmRlclxuICAgICAgICB9KSksXG4gICAgICBmaWx0ZXI6IGxpc3RPZkNhbGNcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0uZmlsdGVyRm4pXG4gICAgICAgIC5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgIGtleTogaXRlbS5rZXkhLFxuICAgICAgICAgIHZhbHVlOiBpdGVtLmZpbHRlclZhbHVlXG4gICAgICAgIH0pKVxuICAgIH0pKVxuICApO1xuICBwcml2YXRlIGxpc3RPZkRhdGFBZnRlckNhbGMkID0gY29tYmluZUxhdGVzdChbdGhpcy5saXN0T2ZEYXRhJCwgdGhpcy5saXN0T2ZDYWxjT3BlcmF0b3IkXSkucGlwZShcbiAgICBtYXAoKFtsaXN0T2ZEYXRhLCBsaXN0T2ZDYWxjT3BlcmF0b3JdKSA9PiB7XG4gICAgICBsZXQgbGlzdE9mRGF0YUFmdGVyQ2FsYyA9IFsuLi5saXN0T2ZEYXRhXTtcbiAgICAgIGNvbnN0IGxpc3RPZkZpbHRlck9wZXJhdG9yID0gbGlzdE9mQ2FsY09wZXJhdG9yLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgY29uc3QgeyBmaWx0ZXJWYWx1ZSwgZmlsdGVyRm4gfSA9IGl0ZW07XG4gICAgICAgIGNvbnN0IGlzUmVzZXQgPVxuICAgICAgICAgIGZpbHRlclZhbHVlID09PSBudWxsIHx8XG4gICAgICAgICAgZmlsdGVyVmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIChBcnJheS5pc0FycmF5KGZpbHRlclZhbHVlKSAmJiBmaWx0ZXJWYWx1ZSEubGVuZ3RoID09PSAwKTtcbiAgICAgICAgcmV0dXJuICFpc1Jlc2V0ICYmIHR5cGVvZiBmaWx0ZXJGbiA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3RPZkZpbHRlck9wZXJhdG9yKSB7XG4gICAgICAgIGNvbnN0IHsgZmlsdGVyRm4sIGZpbHRlclZhbHVlIH0gPSBpdGVtO1xuICAgICAgICBsaXN0T2ZEYXRhQWZ0ZXJDYWxjID0gbGlzdE9mRGF0YUFmdGVyQ2FsYy5maWx0ZXIoZGF0YSA9PiAoZmlsdGVyRm4gYXMgTnpUYWJsZUZpbHRlckZuPFQ+KShmaWx0ZXJWYWx1ZSwgZGF0YSkpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGlzdE9mU29ydE9wZXJhdG9yID0gbGlzdE9mQ2FsY09wZXJhdG9yXG4gICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnNvcnRPcmRlciAhPT0gbnVsbCAmJiB0eXBlb2YgaXRlbS5zb3J0Rm4gPT09ICdmdW5jdGlvbicpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiArYi5zb3J0UHJpb3JpdHkgLSArYS5zb3J0UHJpb3JpdHkpO1xuICAgICAgaWYgKGxpc3RPZkNhbGNPcGVyYXRvci5sZW5ndGgpIHtcbiAgICAgICAgbGlzdE9mRGF0YUFmdGVyQ2FsYy5zb3J0KChyZWNvcmQxLCByZWNvcmQyKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3RPZlNvcnRPcGVyYXRvcikge1xuICAgICAgICAgICAgY29uc3QgeyBzb3J0Rm4sIHNvcnRPcmRlciB9ID0gaXRlbTtcbiAgICAgICAgICAgIGlmIChzb3J0Rm4gJiYgc29ydE9yZGVyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVSZXN1bHQgPSAoc29ydEZuIGFzIE56VGFibGVTb3J0Rm48VD4pKHJlY29yZDEsIHJlY29yZDIsIHNvcnRPcmRlcik7XG4gICAgICAgICAgICAgIGlmIChjb21wYXJlUmVzdWx0ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNvcnRPcmRlciA9PT0gJ2FzY2VuZCcgPyBjb21wYXJlUmVzdWx0IDogLWNvbXBhcmVSZXN1bHQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RPZkRhdGFBZnRlckNhbGM7XG4gICAgfSlcbiAgKTtcbiAgcHJpdmF0ZSBsaXN0T2ZGcm9udEVuZEN1cnJlbnRQYWdlRGF0YSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLnBhZ2VJbmRleERpc3RpbmN0JCxcbiAgICB0aGlzLnBhZ2VTaXplRGlzdGluY3QkLFxuICAgIHRoaXMubGlzdE9mRGF0YUFmdGVyQ2FsYyRcbiAgXSkucGlwZShcbiAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgZmlsdGVyKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IFtwYWdlSW5kZXgsIHBhZ2VTaXplLCBsaXN0T2ZEYXRhXSA9IHZhbHVlO1xuICAgICAgY29uc3QgbWF4UGFnZUluZGV4ID0gTWF0aC5jZWlsKGxpc3RPZkRhdGEubGVuZ3RoIC8gcGFnZVNpemUpIHx8IDE7XG4gICAgICByZXR1cm4gcGFnZUluZGV4IDw9IG1heFBhZ2VJbmRleDtcbiAgICB9KSxcbiAgICBtYXAoKFtwYWdlSW5kZXgsIHBhZ2VTaXplLCBsaXN0T2ZEYXRhXSkgPT4gbGlzdE9mRGF0YS5zbGljZSgocGFnZUluZGV4IC0gMSkgKiBwYWdlU2l6ZSwgcGFnZUluZGV4ICogcGFnZVNpemUpKVxuICApO1xuICBsaXN0T2ZDdXJyZW50UGFnZURhdGEkID0gdGhpcy5mcm9udFBhZ2luYXRpb24kLnBpcGUoXG4gICAgc3dpdGNoTWFwKHBhZ2luYXRpb24gPT4gKHBhZ2luYXRpb24gPyB0aGlzLmxpc3RPZkZyb250RW5kQ3VycmVudFBhZ2VEYXRhJCA6IHRoaXMubGlzdE9mRGF0YUFmdGVyQ2FsYyQpKVxuICApO1xuICB0b3RhbCQgPSB0aGlzLmZyb250UGFnaW5hdGlvbiQucGlwZShcbiAgICBzd2l0Y2hNYXAocGFnaW5hdGlvbiA9PiAocGFnaW5hdGlvbiA/IHRoaXMubGlzdE9mRGF0YUFmdGVyQ2FsYyQgOiB0aGlzLmxpc3RPZkRhdGEkKSksXG4gICAgbWFwKGxpc3QgPT4gbGlzdC5sZW5ndGgpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcblxuICB1cGRhdGVQYWdlU2l6ZShzaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VTaXplJC5uZXh0KHNpemUpO1xuICB9XG4gIHVwZGF0ZUZyb250UGFnaW5hdGlvbihwYWdpbmF0aW9uOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5mcm9udFBhZ2luYXRpb24kLm5leHQocGFnaW5hdGlvbik7XG4gIH1cbiAgdXBkYXRlUGFnZUluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VJbmRleCQubmV4dChpbmRleCk7XG4gIH1cbiAgdXBkYXRlTGlzdE9mRGF0YShsaXN0OiByZWFkb25seSBUW10pOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RPZkRhdGEkLm5leHQobGlzdCk7XG4gIH1cbiAgdXBkYXRlTGlzdE9mQ3VzdG9tQ29sdW1uKGxpc3Q6IE56Q3VzdG9tQ29sdW1uW10pOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RPZkN1c3RvbUNvbHVtbiQubmV4dChsaXN0KTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHt9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==