{"version":3,"file":"rxap-data-source-pagination.mjs","sources":["../../../../../packages/angular/data-source/pagination/src/lib/tokens.ts","../../../../../packages/angular/data-source/pagination/src/lib/error.ts","../../../../../packages/angular/data-source/pagination/src/lib/abstract-pagination.data-source.ts","../../../../../packages/angular/data-source/pagination/src/lib/pagination.data-source.ts","../../../../../packages/angular/data-source/pagination/src/index.ts","../../../../../packages/angular/data-source/pagination/src/rxap-data-source-pagination.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { BaseDataSource } from '@rxap/data-source';\nimport { PaginatorLike } from './abstract-pagination.data-source';\n\nexport const RXAP_PAGINATION_DATA_SOURCE = new InjectionToken<BaseDataSource<any[]>>(\n  '@rxap/data-source/pagination/source');\nexport const RXAP_PAGINATION_DATA_SOURCE_PAGINATOR = new InjectionToken<PaginatorLike>(\n  '@rxap/data-source/pagination/paginator');\n","import { RxapDataSourceError } from '@rxap/data-source';\n\nexport class RxapPaginationDataSourceError extends RxapDataSourceError {\n\n  constructor(message: string, code: string, className?: string) {\n    super(message, code, className);\n    this.addSubPackageName('pagination');\n  }\n\n}\n","import {\n  BaseDataSource,\n  BaseDataSourceMetadata,\n  RXAP_DATA_SOURCE_METADATA,\n  RxapDataSource,\n} from '@rxap/data-source';\nimport {\n  Inject,\n  Injectable,\n  Optional,\n} from '@angular/core';\nimport { RXAP_PAGINATION_DATA_SOURCE_PAGINATOR } from './tokens';\nimport { RxapPaginationDataSourceError } from './error';\nimport {\n  Constructor,\n  IsRequiredPropertyDefined,\n} from '@rxap/utilities';\nimport { Observable } from 'rxjs';\n\nexport interface PageEvent {\n  /** The current page index. */\n  pageIndex: number;\n  /** The current page size */\n  pageSize: number;\n  /** The current total number of items being paged */\n  length?: number;\n}\n\nexport interface PaginatorLike {\n  disabled?: boolean;\n  /** Event emitted when the paginator changes the page size or page index. */\n  page?: Observable<PageEvent>;\n  /** Number of items to display on a page. By default set to 50. */\n  pageSize: number;\n  /** The zero-based page index of the displayed list of items. Defaulted to 0. */\n  pageIndex: number;\n  /** The length of the total number of items that are being paginated. Defaulted to 0. */\n  length: number;\n\n  /** Resets the pagination to the first page **/\n  firstPage?(): void;\n}\n\nexport type AbstractPaginationDataSourceMetadata = BaseDataSourceMetadata\n\n@Injectable()\nexport abstract class AbstractPaginationDataSource<Data> extends BaseDataSource<Data[]> {\n\n  public paginator?: PaginatorLike;\n\n  constructor(\n    @Optional()\n    @Inject(RXAP_PAGINATION_DATA_SOURCE_PAGINATOR)\n      paginator: PaginatorLike | null = null,\n    @Optional()\n    @Inject(RXAP_DATA_SOURCE_METADATA)\n      metadata: AbstractPaginationDataSourceMetadata | null = null,\n  ) {\n    super(metadata);\n    if (paginator) {\n      this.paginator = paginator;\n    }\n  }\n\n  public get pageIndex(): number {\n    return this.paginator?.pageIndex ?? 0;\n  }\n\n  public get pageSize(): number {\n    return this.paginator?.pageSize ?? this.totalLength;\n  }\n\n  private _totalLength = 0;\n\n  public get totalLength(): number {\n    return this._totalLength;\n  }\n\n  protected updateTotalLength(totalLength: number): void {\n    if (this.paginator && this.paginator.length !== totalLength) {\n      this.paginator.length = totalLength;\n    }\n    this._totalLength = totalLength;\n  }\n\n  protected assertPaginator(): void {\n    if (!IsRequiredPropertyDefined(this, 'paginator')) {\n      throw new RxapPaginationDataSourceError('The paginator instance is not defined!', '');\n    }\n  }\n\n  protected applyPagination(data: ReadonlyArray<Data>, pageSize: number, pageIndex: number): Data[] {\n    return data.slice(pageSize * pageIndex, pageSize * pageIndex + pageSize);\n  }\n\n}\n\nexport function RxapAbstractPaginationDataSource(\n  metadataOrId: string | AbstractPaginationDataSourceMetadata,\n  className = 'AbstractPaginationDataSource',\n  packageName = '@rxap/data-source/pagination',\n) {\n  return function (target: Constructor<AbstractPaginationDataSource<any>>) {\n    RxapDataSource(metadataOrId, className, packageName)(target);\n  };\n}\n","import {\n  BaseDataSource,\n  BaseDataSourceViewer,\n  RXAP_DATA_SOURCE_METADATA,\n  RxapDataSource,\n} from '@rxap/data-source';\nimport {\n  RXAP_PAGINATION_DATA_SOURCE,\n  RXAP_PAGINATION_DATA_SOURCE_PAGINATOR,\n} from './tokens';\nimport {\n  Inject,\n  Injectable,\n  Optional,\n} from '@angular/core';\nimport {\n  Observable,\n  TeardownLogic,\n} from 'rxjs';\nimport {\n  map,\n  startWith,\n  switchMap,\n  tap,\n} from 'rxjs/operators';\nimport { RxapPaginationDataSourceError } from './error';\nimport {\n  AbstractPaginationDataSource,\n  AbstractPaginationDataSourceMetadata,\n  PaginatorLike,\n} from './abstract-pagination.data-source';\nimport { Constructor } from '@rxap/utilities';\n\nexport type PaginationDataSourceMetadata = AbstractPaginationDataSourceMetadata\n\n@Injectable()\nexport class PaginationDataSource<Data> extends AbstractPaginationDataSource<Data> {\n\n  constructor(\n    @Inject(RXAP_PAGINATION_DATA_SOURCE) public readonly dataSource: BaseDataSource<Data[]>,\n    @Optional() @Inject(RXAP_PAGINATION_DATA_SOURCE_PAGINATOR) paginator: PaginatorLike | null = null,\n    @Optional() @Inject(RXAP_DATA_SOURCE_METADATA) metadata: PaginationDataSourceMetadata = dataSource.metadata,\n  ) {\n    super(paginator, metadata);\n  }\n\n  public override refresh(): any {\n    this.dataSource.refresh();\n  }\n\n  protected override _connect(viewer: BaseDataSourceViewer): [ Observable<Data[]>, TeardownLogic ] {\n\n    this.assertPaginator();\n\n    return [\n      this.dataSource.connect(viewer).pipe(\n        tap(data => this.updateTotalLength(data.length)),\n        switchMap(data => {\n\n          if (!Array.isArray(data)) {\n            throw new RxapPaginationDataSourceError('The source data source must be a collection data source', '');\n          }\n\n          this.assertPaginator();\n\n          if (this.paginator && this.paginator.page) {\n\n            return this.paginator.page.pipe(\n              startWith({\n                pageIndex: this.paginator.pageIndex,\n                pageSize: this.paginator.pageSize,\n                length: this.paginator.length,\n              }),\n              map(page => this.applyPagination(data, page.pageSize, page.pageIndex)),\n            );\n\n          }\n\n          throw new Error('The paginator have not a defined page property!');\n\n        }),\n      ),\n      () => this.dataSource.disconnect(viewer),\n    ];\n  }\n\n}\n\nexport function RxapPaginationDataSource(\n  metadataOrId: string | PaginationDataSourceMetadata,\n  className = 'PaginationDataSource',\n  packageName = '@rxap/data-source/pagination',\n) {\n  return function (target: Constructor<PaginationDataSource<any>>) {\n    RxapDataSource(metadataOrId, className, packageName)(target);\n  };\n}\n","// region \nexport * from './lib/abstract-pagination.data-source';\nexport * from './lib/error';\nexport * from './lib/pagination.data-source';\nexport * from './lib/tokens';\n// endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}