@rxap/data-source
Version:
Provides a set of classes and decorators for creating and managing data sources in Angular applications, including base classes, static data sources, observable data sources, and method data sources. It also includes a component for displaying data source
162 lines (154 loc) • 8.85 kB
JavaScript
import { RxapHttpDataSourceError } from '@rxap/data-source/http';
import * as i0 from '@angular/core';
import { InjectionToken, Injectable, Inject, Optional, Pipe } from '@angular/core';
import { RXAP_DATA_SOURCE_METADATA } from '@rxap/data-source';
import { RxapHttpPaginationDataSourceError } from '@rxap/data-source/http/pagination';
import { AbstractTableDataSource, RXAP_TABLE_DATA_SOURCE, RXAP_TABLE_DATA_SOURCE_PAGINATOR, RXAP_TABLE_DATA_SOURCE_SORT, RXAP_TABLE_DATA_SOURCE_FILTER, RXAP_TABLE_DATA_SOURCE_PARAMETERS, RxapAbstractTableDataSource } from '@rxap/data-source/table';
import { isPromise } from '@rxap/utilities';
import * as i1 from 'rxjs';
import { EMPTY, combineLatest, of, isObservable } from 'rxjs';
import { startWith, tap, filter, map, switchMap } from 'rxjs/operators';
class RxapHttpTableDataSourceError extends RxapHttpDataSourceError {
constructor(message, code, className) {
super(message, code, className);
this.addSubPackageName('table');
}
}
const RXAP_HTTP_TABLE_DATA_SOURCE_TO_OPTIONS_FUNCTION = new InjectionToken('rxap/data-source/http/table/to-options');
class HttpTableDataSource extends AbstractTableDataSource {
constructor(dataSource, paginator = null, tableEventToHttpOptions = null, sort = null, filter = null, parameters = null, metadata = dataSource.metadata) {
super(paginator, sort, filter, parameters, metadata);
this.dataSource = dataSource;
if (tableEventToHttpOptions) {
this.tableEventToHttpOptions = tableEventToHttpOptions;
}
}
tableEventToHttpOptions(event) {
throw new RxapHttpTableDataSourceError('The TableEventToHttpOptionsFunction is not defined', '');
}
_connect(viewer) {
this.assertPaginator();
if (viewer.viewChange && viewer.viewChange !== EMPTY) {
console.warn('The viewChange property is readonly');
}
if (this.paginator === undefined || this.paginator.page === undefined) {
throw new RxapHttpTableDataSourceError('The paginator instance has not a page property', '');
}
viewer.viewChange = combineLatest([
this.paginator.page.pipe(startWith({
pageIndex: this.paginator.pageIndex,
pageSize: this.paginator.pageSize,
length: this.paginator.length,
}), tap((page) => {
if (typeof page.pageSize !== 'number') {
console.warn('The page size is not defined!');
}
}), filter((page) => typeof page.pageSize === 'number')),
this.sort?.sortChange?.pipe(startWith({
active: this.sort?.active,
direction: this.sort?.direction,
})) ?? of(null),
this.filter?.change ?? of(null),
]).pipe(map(([page, sort, filter]) => ({
start: page ? page.pageSize * page.pageIndex : 0,
end: page ? page.pageSize * page.pageIndex + page.pageSize : Number.MAX_SAFE_INTEGER,
page,
sort,
filter,
})), switchMap((event) => {
const options = this.tableEventToHttpOptions(event);
if (isPromise(options) || isObservable(options)) {
return options;
}
return of(options);
}));
return [
this.dataSource.connect(viewer).pipe(tap((paginationData) => {
if (typeof paginationData !== 'object') {
throw new RxapHttpPaginationDataSourceError('The http data source does not return a PaginationData object. Value is not an object', '');
}
if (paginationData['total'] === undefined || paginationData['total'] === null) {
throw new RxapHttpPaginationDataSourceError('The http data source does not return a PaginationData object. Object has not the property total', '');
}
if (!paginationData['data'] &&
!Array.isArray(paginationData['data'])) {
throw new RxapHttpPaginationDataSourceError('The http data source does not return a PaginationData object. Object has not the property data' +
' property of the value not an array', '');
}
if (paginationData['size'] !== undefined &&
paginationData['size'] !== this.paginator.pageSize) {
console.warn('The selected page size from the paginator is not equal to the page size from the PaginationData object');
}
if (paginationData.page !== undefined &&
paginationData.page !== this.paginator.pageIndex) {
console.warn('The selected page index from the paginator is not equal to the page index from the PaginationData object');
}
}), tap((paginationData) => this.updateTotalLength(paginationData.total)), map((paginationData) => paginationData.data)),
() => this.dataSource.disconnect(viewer),
];
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: HttpTableDataSource, deps: [{ token: RXAP_TABLE_DATA_SOURCE }, { token: RXAP_TABLE_DATA_SOURCE_PAGINATOR, optional: true }, { token: RXAP_HTTP_TABLE_DATA_SOURCE_TO_OPTIONS_FUNCTION, optional: true }, { token: RXAP_TABLE_DATA_SOURCE_SORT, optional: true }, { token: RXAP_TABLE_DATA_SOURCE_FILTER, optional: true }, { token: RXAP_TABLE_DATA_SOURCE_PARAMETERS, optional: true }, { token: RXAP_DATA_SOURCE_METADATA, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: HttpTableDataSource }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: HttpTableDataSource, decorators: [{
type: Injectable
}], ctorParameters: () => [{ type: undefined, decorators: [{
type: Inject,
args: [RXAP_TABLE_DATA_SOURCE]
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [RXAP_TABLE_DATA_SOURCE_PAGINATOR]
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [RXAP_HTTP_TABLE_DATA_SOURCE_TO_OPTIONS_FUNCTION]
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [RXAP_TABLE_DATA_SOURCE_SORT]
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [RXAP_TABLE_DATA_SOURCE_FILTER]
}] }, { type: i1.Observable, decorators: [{
type: Optional
}, {
type: Inject,
args: [RXAP_TABLE_DATA_SOURCE_PARAMETERS]
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [RXAP_DATA_SOURCE_METADATA]
}] }] });
function RxapHttpTableDataSource(metadata, className = 'HttpTableDataSource', packageName = '@rxap/data-source/http/table') {
return function (target) {
RxapAbstractTableDataSource(metadata, className, packageName)(target);
};
}
class ToHttpTableDataSourcePipe {
transform(dataSource, paginator, tableEventToHttpOptions, sort, filter) {
return new HttpTableDataSource(dataSource, paginator, tableEventToHttpOptions, sort, filter);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ToHttpTableDataSourcePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: ToHttpTableDataSourcePipe, isStandalone: true, name: "toHttpTableDataSource" }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ToHttpTableDataSourcePipe, decorators: [{
type: Pipe,
args: [{
name: 'toHttpTableDataSource',
standalone: true,
}]
}] });
// region
// endregion
/**
* Generated bundle index. Do not edit.
*/
export { HttpTableDataSource, RXAP_HTTP_TABLE_DATA_SOURCE_TO_OPTIONS_FUNCTION, RxapHttpTableDataSource, RxapHttpTableDataSourceError, ToHttpTableDataSourcePipe };
//# sourceMappingURL=rxap-data-source-http-table.mjs.map