UNPKG

@alfresco/adf-content-services

Version:
68 lines 9.93 kB
/*! * @license * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { DataSource } from '@angular/cdk/collections'; import { BehaviorSubject, forkJoin, Subject, Subscription } from 'rxjs'; import { take, tap } from 'rxjs/operators'; export class InfiniteScrollDatasource extends DataSource { constructor() { super(...arguments); this.dataStream = new BehaviorSubject([]); this.isLoading$ = new Subject(); this.subscription = new Subscription(); this.batchesFetched = 0; this._itemsCount = 0; /* Determines size of each batch to be fetched */ this.batchSize = 100; /* Observable with initial and on reset loading state */ this.isLoading = this.isLoading$.asObservable(); } get itemsCount() { return this._itemsCount; } get firstItem() { return this._firstItem; } connect(collectionViewer) { this.reset(); this.subscription.add(collectionViewer.viewChange.subscribe((range) => { if (this.batchesFetched * this.batchSize <= range.end) { forkJoin([ this.dataStream.asObservable().pipe(take(1)), this.getNextBatch({ skipCount: this.batchSize * this.batchesFetched, maxItems: this.batchSize }).pipe(take(1), tap((nextBatch) => (this._itemsCount += nextBatch.length))) ]).subscribe((batchesArray) => this.dataStream.next([...batchesArray[0], ...batchesArray[1]])); this.batchesFetched += 1; } })); return this.dataStream; } disconnect() { this.subscription.unsubscribe(); } reset() { this.isLoading$.next(true); this.getNextBatch({ skipCount: 0, maxItems: this.batchSize }) .pipe(take(1)) .subscribe((firstBatch) => { this._itemsCount = firstBatch.length; this._firstItem = firstBatch[0]; this.dataStream.next(firstBatch); this.isLoading$.next(false); }); this.batchesFetched = 1; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdGUtc2Nyb2xsLWRhdGFzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL2luZmluaXRlLXNjcm9sbC1kYXRhc291cmNlL2luZmluaXRlLXNjcm9sbC1kYXRhc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBb0IsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE1BQU0sT0FBZ0Isd0JBQTRCLFNBQVEsVUFBYTtJQUF2RTs7UUFDdUIsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQ3BDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsQyxtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUNuQixnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUd4QixpREFBaUQ7UUFDakQsY0FBUyxHQUFHLEdBQUcsQ0FBQztRQUVoQix3REFBd0Q7UUFDeEQsY0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7SUErQy9DLENBQUM7SUE3Q0csSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUlELE9BQU8sQ0FBQyxnQkFBa0M7UUFDdEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQ2pCLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM1QyxJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3BELFFBQVEsQ0FBQztvQkFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ2pHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDN0Q7aUJBQ0osQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0YsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUM7WUFDN0IsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUNMLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVELFVBQVU7UUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2IsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBDb250ZW50UGFnaW5nUXVlcnkgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IENvbGxlY3Rpb25WaWV3ZXIsIERhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbmZpbml0ZVNjcm9sbERhdGFzb3VyY2U8VD4gZXh0ZW5kcyBEYXRhU291cmNlPFQ+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0YVN0cmVhbSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VFtdPihbXSk7XG4gICAgcHJpdmF0ZSBpc0xvYWRpbmckID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIGJhdGNoZXNGZXRjaGVkID0gMDtcbiAgICBwcml2YXRlIF9pdGVtc0NvdW50ID0gMDtcbiAgICBwcml2YXRlIF9maXJzdEl0ZW06IFQ7XG5cbiAgICAvKiBEZXRlcm1pbmVzIHNpemUgb2YgZWFjaCBiYXRjaCB0byBiZSBmZXRjaGVkICovXG4gICAgYmF0Y2hTaXplID0gMTAwO1xuXG4gICAgLyogT2JzZXJ2YWJsZSB3aXRoIGluaXRpYWwgYW5kIG9uIHJlc2V0IGxvYWRpbmcgc3RhdGUgKi9cbiAgICBpc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZyQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICBnZXQgaXRlbXNDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNDb3VudDtcbiAgICB9XG5cbiAgICBnZXQgZmlyc3RJdGVtKCk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlyc3RJdGVtO1xuICAgIH1cblxuICAgIGFic3RyYWN0IGdldE5leHRCYXRjaChwYWdpbmdPcHRpb25zOiBDb250ZW50UGFnaW5nUXVlcnkpOiBPYnNlcnZhYmxlPFRbXT47XG5cbiAgICBjb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXI6IENvbGxlY3Rpb25WaWV3ZXIpOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgIGNvbGxlY3Rpb25WaWV3ZXIudmlld0NoYW5nZS5zdWJzY3JpYmUoKHJhbmdlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYmF0Y2hlc0ZldGNoZWQgKiB0aGlzLmJhdGNoU2l6ZSA8PSByYW5nZS5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ya0pvaW4oW1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU3RyZWFtLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZSgxKSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE5leHRCYXRjaCh7IHNraXBDb3VudDogdGhpcy5iYXRjaFNpemUgKiB0aGlzLmJhdGNoZXNGZXRjaGVkLCBtYXhJdGVtczogdGhpcy5iYXRjaFNpemUgfSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgobmV4dEJhdGNoKSA9PiAodGhpcy5faXRlbXNDb3VudCArPSBuZXh0QmF0Y2gubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXSkuc3Vic2NyaWJlKChiYXRjaGVzQXJyYXkpID0+IHRoaXMuZGF0YVN0cmVhbS5uZXh0KFsuLi5iYXRjaGVzQXJyYXlbMF0sIC4uLmJhdGNoZXNBcnJheVsxXV0pKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXRjaGVzRmV0Y2hlZCArPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFTdHJlYW07XG4gICAgfVxuXG4gICAgZGlzY29ubmVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZ2V0TmV4dEJhdGNoKHsgc2tpcENvdW50OiAwLCBtYXhJdGVtczogdGhpcy5iYXRjaFNpemUgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChmaXJzdEJhdGNoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXRlbXNDb3VudCA9IGZpcnN0QmF0Y2gubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0SXRlbSA9IGZpcnN0QmF0Y2hbMF07XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU3RyZWFtLm5leHQoZmlyc3RCYXRjaCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYmF0Y2hlc0ZldGNoZWQgPSAxO1xuICAgIH1cbn1cbiJdfQ==