From d59bc085e56670b5d17e27bdc1965128cf5cf7ec Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 22 Apr 2024 15:42:15 +0000 Subject: [PATCH 1/3] Redirect direct mobile tx visits to pizza tracker --- frontend/src/app/app-routing.module.ts | 12 +++++----- .../components/tracker/tracker.component.html | 6 ++++- .../components/tracker/tracker.component.ts | 1 + frontend/src/app/route-guards.ts | 22 +++++++++++++++++++ .../src/app/services/navigation.service.ts | 9 ++++++++ 5 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 frontend/src/app/route-guards.ts diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts index 8e996953d..a09e4a9a4 100644 --- a/frontend/src/app/app-routing.module.ts +++ b/frontend/src/app/app-routing.module.ts @@ -9,6 +9,7 @@ import { StatusViewComponent } from './components/status-view/status-view.compon import { AddressGroupComponent } from './components/address-group/address-group.component'; import { TrackerComponent } from './components/tracker/tracker.component'; import { AccelerateCheckout } from './components/accelerate-checkout/accelerate-checkout.component'; +import { TrackerGuard } from './route-guards'; const browserWindow = window || {}; // @ts-ignore @@ -140,16 +141,17 @@ let routes: Routes = [ loadChildren: () => import('./bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), data: { preload: true }, }, + { + path: 'tx/:id', + canMatch: [TrackerGuard], + runGuardsAndResolvers: 'always', + component: TrackerComponent, + }, { path: '', loadChildren: () => import('./master-page.module').then(m => m.MasterPageModule), data: { preload: true }, }, - { - path: 'tracker', - data: { networkSpecific: true }, - loadChildren: () => import('./components/tracker/tracker.module').then(m => m.TrackerModule), - }, { path: 'wallet', children: [], diff --git a/frontend/src/app/components/tracker/tracker.component.html b/frontend/src/app/components/tracker/tracker.component.html index e6e5843df..3258d70d8 100644 --- a/frontend/src/app/components/tracker/tracker.component.html +++ b/frontend/src/app/components/tracker/tracker.component.html @@ -185,7 +185,11 @@ } - diff --git a/frontend/src/app/components/tracker/tracker.component.ts b/frontend/src/app/components/tracker/tracker.component.ts index 4ba00c189..0e83506fd 100644 --- a/frontend/src/app/components/tracker/tracker.component.ts +++ b/frontend/src/app/components/tracker/tracker.component.ts @@ -140,6 +140,7 @@ export class TrackerComponent implements OnInit, OnDestroy { private priceService: PriceService, private enterpriseService: EnterpriseService, private miningService: MiningService, + private router: Router, private cd: ChangeDetectorRef, private zone: NgZone, @Inject(ZONE_SERVICE) private zoneService: any, diff --git a/frontend/src/app/route-guards.ts b/frontend/src/app/route-guards.ts new file mode 100644 index 000000000..98f703b1c --- /dev/null +++ b/frontend/src/app/route-guards.ts @@ -0,0 +1,22 @@ +import { Injectable, inject } from '@angular/core'; +import { CanMatchFn, Route, Router, UrlSegment } from '@angular/router'; +import { NavigationService } from './services/navigation.service'; + +@Injectable({ + providedIn: 'root' +}) +class GuardService { + constructor( + private router: Router, + private navigationService: NavigationService, + ) {} + + trackerGuard(route: Route, segments: UrlSegment[]): boolean { + const preferredRoute = this.router.getCurrentNavigation()?.extractedUrl.queryParams?.mode; + return preferredRoute !== 'details' && this.navigationService.isInitialLoad() && window.innerWidth <= 767.98; + } +} + +export const TrackerGuard: CanMatchFn = (route: Route, segments: UrlSegment[]): boolean => { + return inject(GuardService).trackerGuard(route, segments); +}; \ No newline at end of file diff --git a/frontend/src/app/services/navigation.service.ts b/frontend/src/app/services/navigation.service.ts index 57f7f84dd..2a3215121 100644 --- a/frontend/src/app/services/navigation.service.ts +++ b/frontend/src/app/services/navigation.service.ts @@ -27,6 +27,7 @@ export class NavigationService { } }; networks = Object.keys(this.networkModules); + initialLoad = true; constructor( private stateService: StateService, @@ -40,6 +41,10 @@ export class NavigationService { if (this.enforceSubnetRestrictions(state)) { this.updateSubnetPaths(state); } + if (this.initialLoad) { + this.initialLoad = false; + } + this.updateSubnetPaths(state); }); } @@ -98,4 +103,8 @@ export class NavigationService { }); this.subnetPaths.next(subnetPaths); } + + isInitialLoad(): boolean { + return this.initialLoad; + } } From 53a36d042fe09286f5b2e839b065c3fe61b1d018 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 26 Jul 2024 16:10:09 +0000 Subject: [PATCH 2/3] Fix /tx redirect merge conflicts --- frontend/src/app/app-routing.module.ts | 4 ++-- frontend/src/app/components/tracker/tracker.component.ts | 2 ++ .../app/components/transaction/transaction.component.ts | 7 +++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts index a09e4a9a4..67dd56c6d 100644 --- a/frontend/src/app/app-routing.module.ts +++ b/frontend/src/app/app-routing.module.ts @@ -142,10 +142,10 @@ let routes: Routes = [ data: { preload: true }, }, { - path: 'tx/:id', + path: 'tx', canMatch: [TrackerGuard], runGuardsAndResolvers: 'always', - component: TrackerComponent, + loadChildren: () => import('./components/tracker/tracker.module').then(m => m.TrackerModule), }, { path: '', diff --git a/frontend/src/app/components/tracker/tracker.component.ts b/frontend/src/app/components/tracker/tracker.component.ts index 0e83506fd..c869f9705 100644 --- a/frontend/src/app/components/tracker/tracker.component.ts +++ b/frontend/src/app/components/tracker/tracker.component.ts @@ -31,6 +31,8 @@ import { TrackerStage } from './tracker-bar.component'; import { MiningService, MiningStats } from '../../services/mining.service'; import { ETA, EtaService } from '../../services/eta.service'; import { getTransactionFlags, getUnacceleratedFeeRate } from '../../shared/transaction.utils'; +import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; + interface Pool { id: number; diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts index 924addaa0..f2d22cb70 100644 --- a/frontend/src/app/components/transaction/transaction.component.ts +++ b/frontend/src/app/components/transaction/transaction.component.ts @@ -518,6 +518,13 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { }); } } + if (window.innerWidth <= 767.98) { + this.router.navigate([this.relativeUrlPipe.transform('/tx'), this.txId], { + queryParamsHandling: 'merge', + preserveFragment: true, + queryParams: { mode: 'details' }, + }); + } this.seoService.setTitle( $localize`:@@bisq.transaction.browser-title:Transaction: ${this.txId}:INTERPOLATION:` ); From 474d384b0c5c1b4a1566f2d85246f0e2254316cf Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 30 Jul 2024 14:48:47 +0000 Subject: [PATCH 3/3] fix wildcard routing clash --- frontend/src/app/app-routing.module.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts index 67dd56c6d..1f2e3f531 100644 --- a/frontend/src/app/app-routing.module.ts +++ b/frontend/src/app/app-routing.module.ts @@ -215,10 +215,6 @@ let routes: Routes = [ loadChildren: () => import('./bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), data: { preload: true }, }, - { - path: '**', - redirectTo: '' - }, ]; if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') { @@ -303,13 +299,16 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') { loadChildren: () => import('./liquid/liquid-graphs.module').then(m => m.LiquidGraphsModule), data: { preload: true }, }, - { - path: '**', - redirectTo: '' - }, ]; } +if (!window['isMempoolSpaceBuild']) { + routes.push({ + path: '**', + redirectTo: '' + }); +} + @NgModule({ imports: [RouterModule.forRoot(routes, { initialNavigation: 'enabledBlocking',