mempool/frontend/src/app/components/rbf-list/rbf-list.component.ts

59 lines
1.8 KiB
TypeScript
Raw Normal View History

2022-12-14 16:51:53 -06:00
import { Component, OnInit, ChangeDetectionStrategy, OnDestroy } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { BehaviorSubject, EMPTY, merge, Observable, Subscription } from 'rxjs';
import { catchError, switchMap, tap } from 'rxjs/operators';
2023-05-03 13:16:27 -06:00
import { WebsocketService } from '../../services/websocket.service';
2022-12-17 09:39:06 -06:00
import { RbfTree } from '../../interfaces/node-api.interface';
2022-12-14 16:51:53 -06:00
import { ApiService } from '../../services/api.service';
import { StateService } from '../../services/state.service';
@Component({
selector: 'app-rbf-list',
templateUrl: './rbf-list.component.html',
styleUrls: ['./rbf-list.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class RbfList implements OnInit, OnDestroy {
2022-12-17 09:39:06 -06:00
rbfTrees$: Observable<RbfTree[]>;
nextRbfSubject = new BehaviorSubject(null);
2022-12-14 16:51:53 -06:00
urlFragmentSubscription: Subscription;
fullRbf: boolean;
isLoading = true;
constructor(
private route: ActivatedRoute,
private router: Router,
private apiService: ApiService,
public stateService: StateService,
private websocketService: WebsocketService,
2023-07-18 11:01:35 +09:00
) { }
2022-12-14 16:51:53 -06:00
ngOnInit(): void {
this.urlFragmentSubscription = this.route.fragment.subscribe((fragment) => {
this.fullRbf = (fragment === 'fullrbf');
this.websocketService.startTrackRbf(this.fullRbf ? 'fullRbf' : 'all');
2022-12-17 09:39:06 -06:00
this.nextRbfSubject.next(null);
2022-12-14 16:51:53 -06:00
});
2022-12-17 09:39:06 -06:00
this.rbfTrees$ = merge(
this.nextRbfSubject.pipe(
switchMap(() => {
return this.apiService.getRbfList$(this.fullRbf);
2022-12-14 16:51:53 -06:00
}),
catchError((e) => {
return EMPTY;
})
),
this.stateService.rbfLatest$
)
.pipe(
2022-12-17 09:39:06 -06:00
tap(() => {
2022-12-14 16:51:53 -06:00
this.isLoading = false;
})
);
}
ngOnDestroy(): void {
this.websocketService.stopTrackRbf();
}
}