{"version":3,"file":"ngx-pagination-data-source.mjs","sources":["../../../projects/ngx-pagination-data-source/src/lib/indicate.ts","../../../projects/ngx-pagination-data-source/src/lib/pagination-data-source.ts","../../../projects/ngx-pagination-data-source/src/public-api.ts","../../../projects/ngx-pagination-data-source/src/ngx-pagination-data-source.ts"],"sourcesContent":["import {defer, Observable, Subject} from 'rxjs'\nimport {finalize} from 'rxjs/operators'\n\nexport function indicate<T>(indicator: Subject<boolean>): (source: Observable<T>) => Observable<T> {\n  return (source: Observable<T>) => source.pipe(\n    s => defer(() => {\n      indicator.next(true)\n      return s\n    }),\n    finalize(() => indicator.next(false))\n  )\n}\n","import { SimpleDataSource } from './simple-data-source';\nimport { Page, PaginationEndpoint, Sort } from './page';\nimport { indicate } from './indicate';\nimport { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';\nimport { map, shareReplay, startWith, switchMap, tap } from 'rxjs/operators';\n\nexport type UpdateFn<T> = (last: T) => T;\n\nexport class PaginationDataSource<T, Q = Partial<T>>\n  implements SimpleDataSource<T>\n{\n  public loading$: Observable<boolean>;\n  public page$: Observable<Page<T>>;\n\n  private readonly pageNumber = new Subject<number>();\n  private readonly sort: BehaviorSubject<Sort<T>>;\n  private readonly query: BehaviorSubject<Q>;\n  private readonly loading = new Subject<boolean>();\n\n  constructor(\n    private endpoint: PaginationEndpoint<T, Q>,\n    initialSort: Sort<T>,\n    initialQuery: Q,\n    public pageSize = 20,\n    public initialPage = 0\n  ) {\n    let firstCall = true;\n    this.query = new BehaviorSubject<Q>(initialQuery);\n    this.sort = new BehaviorSubject<Sort<T>>(initialSort);\n    const param$ = combineLatest([this.query, this.sort]);\n    this.loading$ = this.loading.asObservable();\n    this.page$ = param$.pipe(\n      switchMap(([query, sort]) =>\n        this.pageNumber.pipe(\n          startWith(initialPage && firstCall ? initialPage : 0),\n          tap(() => (firstCall = false)),\n          switchMap((page) =>\n            this.endpoint({ page, sort, size: this.pageSize }, query).pipe(\n              indicate(this.loading)\n            )\n          )\n        )\n      ),\n      shareReplay(1)\n    );\n  }\n\n  sortBy(sortUpdate: Partial<Sort<T>> | UpdateFn<Sort<T>>): void {\n    const lastSort = this.sort.getValue();\n    const nextSort =\n      typeof sortUpdate === 'function'\n        ? sortUpdate(lastSort)\n        : { ...lastSort, ...sortUpdate };\n    this.sort.next(nextSort);\n  }\n\n  queryBy(queryUpdate: Partial<Q> | UpdateFn<Q>): void {\n    const lastQuery = this.query.getValue();\n    const nextQuery =\n      typeof queryUpdate === 'function'\n        ? queryUpdate(lastQuery)\n        : { ...lastQuery, ...queryUpdate };\n    this.query.next(nextQuery);\n  }\n\n  fetch(page: number, pageSize?: number): void {\n    if (pageSize) {\n      this.pageSize = pageSize;\n    }\n    this.pageNumber.next(page);\n  }\n\n  connect(): Observable<T[]> {\n    return this.page$.pipe(map((page) => page.content));\n  }\n\n  disconnect(): void {}\n}\n","/*\n * Public API Surface of ngx-pagination-data-source\n */\n\nexport * from './lib/pagination-data-source'\nexport * from './lib/simple-data-source'\nexport * from './lib/page'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}