{"version":3,"file":"rt-virtual-scroll.mjs","sources":["../../../projects/rt-virtual-scroll/src/lib/rt-virtual-scroll-data-source.ts","../../../projects/rt-virtual-scroll/src/lib/rt-virtual-scroll/rt-virtual-scroll.module.ts","../../../projects/rt-virtual-scroll/src/public-api.ts","../../../projects/rt-virtual-scroll/src/rt-virtual-scroll.ts"],"sourcesContent":["import {CollectionViewer, DataSource, ListRange} from '@angular/cdk/collections';\nimport {HttpClient} from '@angular/common/http';\nimport {ChangeDetectorRef} from '@angular/core';\nimport {BehaviorSubject, combineLatest, mergeMap, Observable, of, Subscription} from 'rxjs';\nimport {distinctUntilChanged, filter, map, startWith, tap} from 'rxjs/operators';\n\n/**\n * Progress statuses for any async operations, like loading, calculations, etc.\n * May be used to display load state without creating a lot of variables.\n */\nexport enum PROGRESS_STATUSES {\n  /** Display that process were not started yet. */\n  NOT_INITIALIZED = 'not_initialized',\n\n  /** Display that process started, but not finished yet. */\n  IN_PROGRESS = 'in_progress',\n\n  /** Display that process started, and finished successfully. */\n  SUCCEED = 'finished',\n\n  /** Display that process started, but were interrupted by unexpected error. */\n  INTERRUPTED = 'interrupted',\n}\n\n\nexport class RtVirtualScrollDataSource<ListType, ResponseType = any> extends DataSource<ListType | undefined> {\n\n  defaultKeys: {\n    data: keyof ResponseType | null;\n    totalCount: keyof ResponseType | null;\n    page: string | null;\n  } = {\n    data: null,\n    totalCount: null,\n    page: null,\n  };\n\n  private readonly _subscription = new Subscription();\n  private _subscriptionHttp = new Subscription();\n  private _collectionViewer$ = new BehaviorSubject<ListRange>({start: null, end: null});\n\n  private readonly _pageSize: number;\n  private _cachedData: ListType[];\n  private _fetchedPages = new Set<number>();\n  private _dataStream: BehaviorSubject<(ListType | undefined)[]> = new BehaviorSubject<(ListType | undefined)[]>([]);\n  private request: Observable<unknown>;\n  private isDefaultLength = true;\n  private _api: string;\n  private _params: any;\n  private _isRemoveEmptyParams = false;\n\n  constructor(private http: HttpClient, private cd: ChangeDetectorRef, pageSize: number, length = 0) {\n    super();\n    this._pageSize = pageSize;\n    this._length = length;\n  }\n\n  private _progressStatus: PROGRESS_STATUSES = PROGRESS_STATUSES.NOT_INITIALIZED;\n\n  get progressStatus(): PROGRESS_STATUSES {\n    return this._progressStatus;\n  }\n\n  private _length = 100;\n\n  get length(): number {\n    return this._length;\n  }\n\n  connect(collectionViewer: CollectionViewer): Observable<(ListType | undefined)[]> {\n    this._subscription.add(\n      collectionViewer.viewChange.subscribe({next: range => this._collectionViewer$.next(range)}),\n    );\n    return this._dataStream;\n  }\n\n  disconnect(): void {\n    this._subscription.unsubscribe();\n    this._subscriptionHttp.unsubscribe();\n  }\n\n  setApi(api: string, params?: unknown): RtVirtualScrollDataSource<ListType, ResponseType> {\n    this._api = api;\n\n\n    this._params = params;\n    this._subscriptionHttp.unsubscribe();\n    this._subscriptionHttp = new Subscription();\n    this._fetchedPages.clear();\n    this._cachedData = Array.from({length: this._pageSize});\n    this._dataStream.next(this._cachedData);\n    this._collectionViewer$.next({start: 0, end: 0});\n\n    this.request = this.http.get(api, {params: this._isRemoveEmptyParams ? this.removeEmptyParams(this._params) : this._params});\n    return this;\n  }\n\n  isRemoveEmptyParams(value = true): RtVirtualScrollDataSource<ListType, ResponseType> {\n    this._isRemoveEmptyParams = value;\n    return this;\n  }\n\n  setDefaultKeys(\n    data: keyof ResponseType,\n    totalCount: keyof ResponseType,\n    page: string,\n  ): RtVirtualScrollDataSource<ListType, ResponseType> {\n    this.defaultKeys.data = data;\n    this.defaultKeys.totalCount = totalCount;\n    this.defaultKeys.page = page;\n    return this;\n  }\n\n  load(): void {\n    this.isDefaultLength = true;\n    this._subscriptionHttp.add(\n      this._collectionViewer$.asObservable()\n        .pipe(\n          startWith({start: 0, end: this._pageSize}),\n          // Calculate the page index for the given start/end range.\n          mergeMap(range => {\n            const startPage = this._getPageForIndex(range.start);\n            const endPage = this._getPageForIndex(range.end - 1);\n\n            // Generate an array of page numbers from startPage to endPage.\n            const pagesArray = Array.from({length: endPage - startPage + 1}, (_, index) => startPage + index);\n\n            // Use of to emit each page in the array one by one.\n            return of(...pagesArray).pipe(\n              // Map to the {page, range} object.\n              map(page => ({page, range})),\n            );\n          }),\n\n\n          // Only if the page has changed and page is not exist in set.\n          filter((data) => !this._fetchedPages.has(data.page)),\n\n          // Fetch the new page.\n          tap(data => this._fetchPage(data.page)),\n\n          map(data => ({page: data.page, range: data.range})),\n\n          distinctUntilChanged((prev, curr) => prev.page === curr.page),\n\n          mergeMap(view => {\n\n            const nextApi = this.getNextApi(view.page);\n\n            if (!nextApi) {\n              return of([null, null]);\n            }\n\n\n            this._api = nextApi;\n            this.request = this.http.get(\n              this._api,\n              {params: this._isRemoveEmptyParams ? this.removeEmptyParams(this._params) : this._params},\n            );\n\n            this._progressStatus = PROGRESS_STATUSES.IN_PROGRESS;\n            this.cd.detectChanges();\n            return combineLatest([\n                this.request.pipe(map(data => ({\n                  data: data[this.defaultKeys.data],\n                  total: data[this.defaultKeys.totalCount],\n                }))),\n                of(view),\n              ],\n            );\n          }),\n\n          filter(([data]) => !!data),\n        )\n        .subscribe({\n            next: ([data, range]) => {\n              this._length = data.total;\n              this._progressStatus = PROGRESS_STATUSES.SUCCEED;\n              if (this.isDefaultLength) {\n                this._cachedData = Array.from<ListType>({length: this._length});\n                this.isDefaultLength = false;\n              }\n\n              this._cachedData.splice(\n                range.page * this._pageSize,\n                this._pageSize,\n                ...data.data,\n              );\n\n              this._dataStream.next(this._cachedData);\n              this.cd.detectChanges();\n            },\n            error: () => this._progressStatus = PROGRESS_STATUSES.INTERRUPTED,\n          },\n        ),\n    );\n\n  }\n\n  private getNextApi(page: number): string {\n\n    const existPage = this._api.includes(this.defaultKeys.page);\n    let modifiedApi = this._api;\n    if (page) {\n      if (existPage) {\n        const regex = new RegExp(`${this.defaultKeys.page}=\\\\d+`);\n        modifiedApi = this._api.replace(regex, `${this.defaultKeys.page}=${page + 1}`);\n      } else {\n        this._params = {...this._params, page: page + 1};\n      }\n    }\n\n    return modifiedApi;\n  }\n\n  private removeEmptyParams(params: any): any {\n    if (!params) {\n      return params;\n    }\n    return Object.fromEntries(\n      Object.entries(params).filter(\n        ([, value]) => value !== null && value !== undefined && value !== '',\n      ),\n    );\n  }\n\n  private _getPageForIndex(index: number): number {\n    return Math.floor(index / this._pageSize);\n  }\n\n  private _fetchPage(page: number) {\n    this._fetchedPages.add(page);\n  }\n}\n","import {CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport} from '@angular/cdk/scrolling';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {HttpClientModule} from '@angular/common/http';\n\n@NgModule({\n    declarations: [],\n    imports: [\n        CommonModule,\n        CdkVirtualScrollViewport,\n        CdkFixedSizeVirtualScroll,\n        CdkVirtualForOf,\n        HttpClientModule,\n    ],\n    exports: [\n        CdkVirtualScrollViewport,\n        CdkFixedSizeVirtualScroll,\n        CdkVirtualForOf,\n    ],\n    providers: [CdkVirtualScrollViewport],\n})\nexport class RtVirtualScrollModule {\n}\n","/*\n * Public API Surface of rt-virtual-scroll\n */\n\nexport * from './lib/rt-virtual-scroll-data-source';\nexport * from './lib/rt-virtual-scroll/rt-virtual-scroll.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}