Commit 9bc02079 authored by Guy Thouret's avatar Guy Thouret

(fix) Prevent feed offset from exceeding the maximum offset of the filtered...

(fix) Prevent feed offset from exceeding the maximum offset of the filtered feed; Minor extract refactor to explain by method name - #2190
1 merge request!629WIP: Fix duplicate boost posts appearing in newfeed
Pipeline #93601757 running with stages
......@@ -5,6 +5,7 @@ import { FeedsService } from '../../services/feeds.service';
@Injectable()
export class FeaturedContentService {
offset: number = -1;
maximumOffset: number = 0;
constructor(protected feedsService: FeedsService) {
this.feedsService
......@@ -12,20 +13,25 @@ export class FeaturedContentService {
.setOffset(0)
.setEndpoint('api/v2/boost/feed')
.fetch();
this.feedsService.feed.subscribe(feed => {
this.maximumOffset = feed.length - 1;
});
}
async fetch() {
if (this.offset++ >= this.feedsService.rawFeed.getValue().length - 1) {
if (this.offset++ >= this.maximumOffset) {
this.offset = 0;
this.fetchNextFeed();
}
// Refetch every 2 calls, if not loading
if (this.offset % 2 && !this.feedsService.inProgress.getValue()) {
this.feedsService.clear();
this.feedsService.fetch();
}
return this.entityFromFeed();
}
protected async entityFromFeed() {
return await this.feedsService.feed
.pipe(
filter(feed => feed.length > 0),
filter(item => item.length > 0),
first(),
mergeMap(feed => feed),
skip(this.offset),
......@@ -39,4 +45,11 @@ export class FeaturedContentService {
)
.toPromise();
}
protected fetchNextFeed() {
if (!this.feedsService.inProgress.getValue()) {
this.feedsService.clear();
this.feedsService.fetch();
}
}
}
Please register or to comment