From d3d3fd0db1e6907607c0094ad6515864d19fe815 Mon Sep 17 00:00:00 2001 From: softsimon Date: Thu, 16 Jul 2020 16:18:35 +0700 Subject: [PATCH] If bisq tx not found, check for regular tx and redirect to /tx/ --- .../bisq-transaction.component.html | 14 ++++++- .../bisq-transaction.component.ts | 41 +++++++++++++++++-- .../transaction/transaction.component.html | 2 +- 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/frontend/src/app/bisq/bisq-transaction/bisq-transaction.component.html b/frontend/src/app/bisq/bisq-transaction/bisq-transaction.component.html index f8d4fdad4..5da0ef69c 100644 --- a/frontend/src/app/bisq/bisq-transaction/bisq-transaction.component.html +++ b/frontend/src/app/bisq/bisq-transaction/bisq-transaction.component.html @@ -2,7 +2,7 @@

Transaction

- + @@ -62,7 +62,7 @@ - +
@@ -131,4 +131,14 @@
+ +
+ +
+ Error loading transaction +
+ {{ error.status }}: {{ error.statusText }} +
+
+ \ No newline at end of file diff --git a/frontend/src/app/bisq/bisq-transaction/bisq-transaction.component.ts b/frontend/src/app/bisq/bisq-transaction/bisq-transaction.component.ts index 94aa19733..a875e1065 100644 --- a/frontend/src/app/bisq/bisq-transaction/bisq-transaction.component.ts +++ b/frontend/src/app/bisq/bisq-transaction/bisq-transaction.component.ts @@ -1,12 +1,14 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; -import { ActivatedRoute, ParamMap } from '@angular/router'; +import { ActivatedRoute, ParamMap, Router } from '@angular/router'; import { BisqTransaction } from 'src/app/bisq/bisq.interfaces'; -import { switchMap, map } from 'rxjs/operators'; +import { switchMap, map, catchError } from 'rxjs/operators'; import { of, Observable, Subscription } from 'rxjs'; import { StateService } from 'src/app/services/state.service'; import { Block } from 'src/app/interfaces/electrs.interface'; import { BisqApiService } from '../bisq-api.service'; import { SeoService } from 'src/app/services/seo.service'; +import { ElectrsApiService } from 'src/app/services/electrs-api.service'; +import { HttpErrorResponse } from '@angular/common/http'; @Component({ selector: 'app-bisq-transaction', @@ -19,31 +21,64 @@ export class BisqTransactionComponent implements OnInit, OnDestroy { txId: string; price: number; isLoading = true; + error = null; subscription: Subscription; constructor( private route: ActivatedRoute, private bisqApiService: BisqApiService, + private electrsApiService: ElectrsApiService, private stateService: StateService, private seoService: SeoService, + private router: Router, ) { } ngOnInit(): void { this.subscription = this.route.paramMap.pipe( switchMap((params: ParamMap) => { this.isLoading = true; + this.error = null; document.body.scrollTo(0, 0); this.txId = params.get('id') || ''; this.seoService.setTitle('Transaction: ' + this.txId, true); if (history.state.data) { return of(history.state.data); } - return this.bisqApiService.getTransaction$(this.txId); + return this.bisqApiService.getTransaction$(this.txId) + .pipe( + catchError((bisqTxError: HttpErrorResponse) => { + if (bisqTxError.status === 404) { + return this.electrsApiService.getTransaction$(this.txId) + .pipe( + catchError((txError: HttpErrorResponse) => { + console.log(txError); + this.error = txError; + return of(null); + }) + ); + } + this.error = bisqTxError; + return of(null); + }) + ); }) ) .subscribe((tx) => { this.isLoading = false; + + if (!tx) { + return; + } + + if (tx.version) { + this.router.navigate(['/tx/', this.txId], { state: { data: tx, bsqTx: true }}); + return; + } + this.bisqTx = tx; + }, + (error) => { + this.error = error; }); this.latestBlock$ = this.stateService.blocks$.pipe(map((([block]) => block))); diff --git a/frontend/src/app/components/transaction/transaction.component.html b/frontend/src/app/components/transaction/transaction.component.html index 397971e93..60d4f1954 100644 --- a/frontend/src/app/components/transaction/transaction.component.html +++ b/frontend/src/app/components/transaction/transaction.component.html @@ -244,7 +244,7 @@ -
+

Transaction not found.

Waiting for it to appear in the mempool...