@alfresco/adf-content-services
Version:
Alfresco ADF content services
68 lines • 9.93 kB
JavaScript
/*!
* @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==