Refactor pool block list observable

This commit is contained in:
nymkappa 2022-06-02 21:55:33 +02:00
parent 429b4f2bc6
commit 56e996c893
No known key found for this signature in database
GPG Key ID: E155910B16E8BD04

View File

@ -1,5 +1,5 @@
import { Component, OnInit, ChangeDetectionStrategy, Input } from '@angular/core'; import { Component, OnInit, ChangeDetectionStrategy, Input } from '@angular/core';
import { BehaviorSubject, combineLatest, Observable, timer } from 'rxjs'; import { BehaviorSubject, combineLatest, concat, Observable, timer } from 'rxjs';
import { delayWhen, map, retryWhen, scan, skip, switchMap, tap } from 'rxjs/operators'; import { delayWhen, map, retryWhen, scan, skip, switchMap, tap } from 'rxjs/operators';
import { BlockExtended } from 'src/app/interfaces/node-api.interface'; import { BlockExtended } from 'src/app/interfaces/node-api.interface';
import { ApiService } from 'src/app/services/api.service'; import { ApiService } from 'src/app/services/api.service';
@ -15,7 +15,7 @@ import { WebsocketService } from 'src/app/services/websocket.service';
export class BlocksList implements OnInit { export class BlocksList implements OnInit {
@Input() widget: boolean = false; @Input() widget: boolean = false;
blocks$: Observable<any[]> = undefined; blocks$: Observable<BlockExtended[]> = undefined;
indexingAvailable = false; indexingAvailable = false;
isLoading = true; isLoading = true;
@ -27,6 +27,7 @@ export class BlocksList implements OnInit {
blocksCount: number; blocksCount: number;
fromHeightSubject: BehaviorSubject<number> = new BehaviorSubject(this.fromBlockHeight); fromHeightSubject: BehaviorSubject<number> = new BehaviorSubject(this.fromBlockHeight);
skeletonLines: number[] = []; skeletonLines: number[] = [];
lastBlockHeight = -1;
constructor( constructor(
private apiService: ApiService, private apiService: ApiService,
@ -57,6 +58,7 @@ export class BlocksList implements OnInit {
this.blocksCount = blocks[0].height + 1; this.blocksCount = blocks[0].height + 1;
} }
this.isLoading = false; this.isLoading = false;
this.lastBlockHeight = Math.max(...blocks.map(o => o.height))
}), }),
map(blocks => { map(blocks => {
if (this.indexingAvailable) { if (this.indexingAvailable) {
@ -73,12 +75,18 @@ export class BlocksList implements OnInit {
}), }),
retryWhen(errors => errors.pipe(delayWhen(() => timer(10000)))) retryWhen(errors => errors.pipe(delayWhen(() => timer(10000))))
) )
}) })
), ),
this.stateService.blocks$ this.stateService.blocks$
.pipe( .pipe(
skip(this.stateService.env.MEMPOOL_BLOCKS_AMOUNT - 1), switchMap((block) => {
), if (block[0].height <= this.lastBlockHeight) {
return []; // Return an empty stream so the last pipe is not executed
}
this.lastBlockHeight = block[0].height;
return [block];
})
)
]) ])
.pipe( .pipe(
scan((acc, blocks) => { scan((acc, blocks) => {