From 56e996c893f698116882ec3b5d95c36fc7bb18c8 Mon Sep 17 00:00:00 2001 From: nymkappa Date: Thu, 2 Jun 2022 21:55:33 +0200 Subject: [PATCH] Refactor pool block list observable --- .../blocks-list/blocks-list.component.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/components/blocks-list/blocks-list.component.ts b/frontend/src/app/components/blocks-list/blocks-list.component.ts index 7cca2af62..07b80a562 100644 --- a/frontend/src/app/components/blocks-list/blocks-list.component.ts +++ b/frontend/src/app/components/blocks-list/blocks-list.component.ts @@ -1,5 +1,5 @@ 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 { BlockExtended } from 'src/app/interfaces/node-api.interface'; 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 { @Input() widget: boolean = false; - blocks$: Observable = undefined; + blocks$: Observable = undefined; indexingAvailable = false; isLoading = true; @@ -27,6 +27,7 @@ export class BlocksList implements OnInit { blocksCount: number; fromHeightSubject: BehaviorSubject = new BehaviorSubject(this.fromBlockHeight); skeletonLines: number[] = []; + lastBlockHeight = -1; constructor( private apiService: ApiService, @@ -57,6 +58,7 @@ export class BlocksList implements OnInit { this.blocksCount = blocks[0].height + 1; } this.isLoading = false; + this.lastBlockHeight = Math.max(...blocks.map(o => o.height)) }), map(blocks => { if (this.indexingAvailable) { @@ -73,12 +75,18 @@ export class BlocksList implements OnInit { }), retryWhen(errors => errors.pipe(delayWhen(() => timer(10000)))) ) - }) + }) ), this.stateService.blocks$ .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( scan((acc, blocks) => {