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 passed with stages
in 64 minutes and 16 seconds
......@@ -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