-
- Top 100 nodes connectivity ranking
-
-
+
+
+
Liquidity Ranking
+
+
+
+
- |
- Alias |
- Channels |
- Liquidity |
- First seen |
- Last update |
- Location |
+ Alias |
+ Channels |
+ Capacity |
+ {{ currency$ | async }} |
+ First seen |
+ Last update |
+ Location |
-
-
-
- {{ i + 1 }}
+ |
+
+
+
|
-
- {{ node.alias }}
+ |
+ {{ node.channels ? (node.channels | number) : '~' }}
|
-
- {{ node.channels | number }}
- |
-
+ |
|
-
+ |
+
+ |
+
|
-
+ |
|
-
+ |
|
-
+
-
-
-
-
-
- |
-
-
- |
-
-
- |
-
-
- |
-
-
- |
-
-
- |
-
-
- |
-
-
-
+
+
+
+
+
-
\ No newline at end of file
+
+
diff --git a/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.scss b/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.scss
index 59151f6b2..a42599d69 100644
--- a/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.scss
+++ b/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.scss
@@ -1,91 +1,54 @@
.container-xl {
max-width: 1400px;
- padding-bottom: 100px;
- @media (min-width: 960px) {
- padding-left: 50px;
- padding-right: 50px;
- }
+}
+.container-xl.widget {
+ padding-right: 0px;
+ padding-left: 0px;
+ padding-bottom: 0px;
}
-.table td, .table th {
- padding: 0.5rem;
+tr, td, th {
+ border: 0px;
+ padding-top: 0.65rem !important;
+ padding-bottom: 0.7rem !important;
}
-.full .rank {
- width: 5%;
-}
-.widget .rank {
- @media (min-width: 960px) {
- width: 13%;
- }
- @media (max-width: 960px) {
- padding-left: 0px;
- padding-right: 0px;
- }
+.clear-link {
+ color: white;
}
-.full .alias {
- width: 20%;
+.pool {
+ width: 15%;
+ @media (max-width: 576px) {
+ width: 75%;
+ }
overflow: hidden;
text-overflow: ellipsis;
- max-width: 350px;
- @media (max-width: 960px) {
- width: 40%;
- max-width: 500px;
- }
+ white-space: nowrap;
+ max-width: 160px;
}
-.widget .alias {
- width: 60%;
- overflow: hidden;
+.pool-name {
+ display: inline-block;
+ vertical-align: text-top;
text-overflow: ellipsis;
- max-width: 350px;
- @media (max-width: 960px) {
- max-width: 175px;
- }
+ overflow: hidden;
+}
+.pool.widget {
+ width: 45%;
}
-.full .capacity {
+.liquidity {
width: 10%;
- @media (max-width: 960px) {
- width: 30%;
- }
-}
-.widget .capacity {
- width: 32%;
- @media (max-width: 960px) {
- padding-left: 0px;
- padding-right: 0px;
+ @media (max-width: 576px) {
+ width: 25%;
}
}
-.full .channels {
- width: 15%;
- padding-right: 50px;
- @media (max-width: 960px) {
- display: none;
+.geolocation {
+ @media (min-width: 768px) and (max-width: 991px) {
+ display: none !important;
}
-}
-
-.full .timestamp-first {
- width: 10%;
- @media (max-width: 960px) {
- display: none;
- }
-}
-
-.full .timestamp-update {
- width: 10%;
- @media (max-width: 960px) {
- display: none;
- }
-}
-
-.full .location {
- width: 15%;
- @media (max-width: 960px) {
- width: 30%;
- }
- @media (max-width: 600px) {
- display: none;
+ @media (max-width: 575px) {
+ display: none !important;
}
}
\ No newline at end of file
diff --git a/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts b/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts
index 2c88e4bae..ce6436ce3 100644
--- a/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts
+++ b/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts
@@ -1,7 +1,7 @@
import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';
import { map, Observable } from 'rxjs';
+import { StateService } from 'src/app/services/state.service';
import { INodesRanking, ITopNodesPerChannels } from '../../../interfaces/node-api.interface';
-import { isMobile } from '../../../shared/common.utils';
import { GeolocationData } from '../../../shared/components/geolocation/geolocation.component';
import { LightningApiService } from '../../lightning-api.service';
@@ -17,13 +17,17 @@ export class TopNodesPerChannels implements OnInit {
topNodesPerChannels$: Observable
;
skeletonRows: number[] = [];
+ currency$: Observable;
constructor(
private apiService: LightningApiService,
+ private stateService: StateService,
) {}
ngOnInit(): void {
- for (let i = 1; i <= (this.widget ? (isMobile() ? 8 : 7) : 100); ++i) {
+ this.currency$ = this.stateService.fiatCurrency$;
+
+ for (let i = 1; i <= (this.widget ? 6 : 100); ++i) {
this.skeletonRows.push(i);
}
@@ -44,7 +48,15 @@ export class TopNodesPerChannels implements OnInit {
} else {
this.topNodesPerChannels$ = this.nodes$.pipe(
map((ranking) => {
- return ranking.topByChannels.slice(0, isMobile() ? 8 : 7);
+ for (const i in ranking.topByChannels) {
+ ranking.topByChannels[i].geolocation = {
+ country: ranking.topByChannels[i].country?.en,
+ city: ranking.topByChannels[i].city?.en,
+ subdivision: ranking.topByChannels[i].subdivision?.en,
+ iso: ranking.topByChannels[i].iso_code,
+ };
+ }
+ return ranking.topByChannels.slice(0, 6);
})
);
}
diff --git a/frontend/src/app/services/cache.service.ts b/frontend/src/app/services/cache.service.ts
index 15ef99859..5eefd6e0a 100644
--- a/frontend/src/app/services/cache.service.ts
+++ b/frontend/src/app/services/cache.service.ts
@@ -17,6 +17,7 @@ export class CacheService {
txCache: { [txid: string]: Transaction } = {};
+ network: string;
blockCache: { [height: number]: BlockExtended } = {};
blockLoading: { [height: number]: boolean } = {};
copiesInBlockQueue: { [height: number]: number } = {};
@@ -33,6 +34,10 @@ export class CacheService {
this.stateService.chainTip$.subscribe((height) => {
this.tip = height;
});
+ this.stateService.networkChanged$.subscribe((network) => {
+ this.network = network;
+ this.resetBlockCache();
+ });
}
setTxCache(transactions) {
@@ -68,15 +73,17 @@ export class CacheService {
} catch (e) {
console.log("failed to load blocks: ", e.message);
}
- for (let i = 0; i < chunkSize; i++) {
- delete this.blockLoading[maxHeight - i];
- }
if (result && result.length) {
result.forEach(block => {
- this.addBlockToCache(block);
- this.loadedBlocks$.next(block);
+ if (this.blockLoading[block.height]) {
+ this.addBlockToCache(block);
+ this.loadedBlocks$.next(block);
+ }
});
}
+ for (let i = 0; i < chunkSize; i++) {
+ delete this.blockLoading[maxHeight - i];
+ }
this.clearBlocks();
} else {
this.bumpBlockPriority(height);
@@ -104,6 +111,14 @@ export class CacheService {
}
}
+ // remove all blocks from the cache
+ resetBlockCache() {
+ this.blockCache = {};
+ this.blockLoading = {};
+ this.copiesInBlockQueue = {};
+ this.blockPriorities = [];
+ }
+
getCachedBlock(height) {
return this.blockCache[height];
}