Always show channels map in node page - auto zoom on the node
This commit is contained in:
		
							parent
							
								
									0f9941f0d1
								
							
						
					
					
						commit
						5d81a13a80
					
				| @ -102,9 +102,7 @@ | ||||
| 
 | ||||
|   </div> | ||||
| 
 | ||||
|   <br> | ||||
| 
 | ||||
|   <div class="input-group mb-3" *ngIf="!error && node.socketsObject.length"> | ||||
|   <div class="input-group mt-3" *ngIf="!error && node.socketsObject.length"> | ||||
|     <div class="d-inline-block" ngbDropdown #myDrop="ngbDropdown" | ||||
|       *ngIf="node.socketsObject.length > 1; else noDropdown"> | ||||
|       <button class="btn btn-secondary dropdown-toggle" type="button" aria-expanded="false" ngbDropdownAnchor | ||||
| @ -133,24 +131,16 @@ | ||||
|     </button> | ||||
|   </div> | ||||
| 
 | ||||
|   <br> | ||||
| 
 | ||||
|   <app-nodes-channels-map *ngIf="!error" [style]="'nodepage'" [publicKey]="node.public_key"></app-nodes-channels-map> | ||||
|   <app-node-statistics-chart [publicKey]="node.public_key" *ngIf="!error"></app-node-statistics-chart> | ||||
| 
 | ||||
|   <br> | ||||
| 
 | ||||
|   <div class="d-flex justify-content-between" *ngIf="!error"> | ||||
|     <h2><span i18n="lightning.all-channels">All channels</span> ({{ channelsListStatus === 'open' ? node.opened_channel_count : node.closed_channel_count }})</h2> | ||||
|     <div class="d-flex justify-content-end"> | ||||
|       <app-toggle [textLeft]="'List'" [textRight]="'Map'" (toggleStatusChanged)="channelsListModeChange($event)"></app-toggle> | ||||
|     </div> | ||||
|     <h2>Channels ({{ channelsListStatus === 'open' ? node.opened_channel_count : node.closed_channel_count }})</h2> | ||||
|   </div> | ||||
| 
 | ||||
|   <app-nodes-channels-map *ngIf="channelsListMode === 'map' && !error" [style]="'nodepage'" [publicKey]="node.public_key"> | ||||
|   </app-nodes-channels-map> | ||||
|   <app-channels-list *ngIf="channelsListMode === 'list' && !error" [publicKey]="node.public_key" | ||||
|   <app-channels-list *ngIf="!error" [publicKey]="node.public_key" | ||||
|     (channelsStatusChangedEvent)="onChannelsListStatusChanged($event)"></app-channels-list> | ||||
|      | ||||
| </div> | ||||
| 
 | ||||
| <br> | ||||
| <br> | ||||
|  | ||||
| @ -19,7 +19,6 @@ export class NodeComponent implements OnInit { | ||||
|   publicKey$: Observable<string>; | ||||
|   selectedSocketIndex = 0; | ||||
|   qrCodeVisible = false; | ||||
|   channelsListMode = 'list'; | ||||
|   channelsListStatus: string; | ||||
|   error: Error; | ||||
|   publicKey: string; | ||||
| @ -83,14 +82,6 @@ export class NodeComponent implements OnInit { | ||||
|     this.selectedSocketIndex = index; | ||||
|   } | ||||
| 
 | ||||
|   channelsListModeChange(toggle) { | ||||
|     if (toggle === true) { | ||||
|       this.channelsListMode = 'map'; | ||||
|     } else { | ||||
|       this.channelsListMode = 'list'; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   onChannelsListStatusChanged(e) { | ||||
|     this.channelsListStatus = e; | ||||
|   } | ||||
|  | ||||
| @ -3,9 +3,6 @@ | ||||
|   <div *ngIf="style === 'graph'" class="card-header"> | ||||
|     <div class="d-flex d-md-block align-items-baseline" style="margin-bottom: -5px"> | ||||
|       <span i18n="lightning.nodes-channels-world-map">Lightning nodes channels world map</span> | ||||
|       <button class="btn p-0 pl-2" style="margin: 0 0 4px 0px"> | ||||
|         <fa-icon [icon]="['fas', 'download']" [fixedWidth]="true" (click)="onSaveChart()"></fa-icon> | ||||
|       </button> | ||||
|     </div> | ||||
|     <small style="color: #ffffff66" i18n="lightning.tor-nodes-excluded">(Tor nodes excluded)</small> | ||||
|   </div> | ||||
|  | ||||
| @ -20,7 +20,8 @@ | ||||
| } | ||||
| 
 | ||||
| .full-container.nodepage { | ||||
|   margin-top: 50px; | ||||
|   margin-top: 25px; | ||||
|   margin-bottom: 25px; | ||||
| } | ||||
| 
 | ||||
| .full-container.widget { | ||||
|  | ||||
| @ -3,7 +3,6 @@ import { SeoService } from 'src/app/services/seo.service'; | ||||
| import { ApiService } from 'src/app/services/api.service'; | ||||
| import { Observable, switchMap, tap, zip } from 'rxjs'; | ||||
| import { AssetsService } from 'src/app/services/assets.service'; | ||||
| import { download } from 'src/app/shared/graphs.utils'; | ||||
| import { ActivatedRoute, ParamMap, Router } from '@angular/router'; | ||||
| import { RelativeUrlPipe } from 'src/app/shared/pipes/relative-url/relative-url.pipe'; | ||||
| import { StateService } from 'src/app/services/state.service'; | ||||
| @ -21,6 +20,7 @@ export class NodesChannelsMap implements OnInit, OnDestroy { | ||||
|   @Input() publicKey: string | undefined; | ||||
| 
 | ||||
|   observable$: Observable<any>; | ||||
|   center: number[] | undefined = undefined; | ||||
| 
 | ||||
|   chartInstance = undefined; | ||||
|   chartOptions: EChartsOption = {}; | ||||
| @ -42,6 +42,8 @@ export class NodesChannelsMap implements OnInit, OnDestroy { | ||||
|   ngOnDestroy(): void {} | ||||
| 
 | ||||
|   ngOnInit(): void { | ||||
|     this.center = this.style === 'widget' ? [0, 0, -10] : undefined; | ||||
| 
 | ||||
|     if (this.style === 'graph') { | ||||
|       this.seoService.setTitle($localize`Lightning nodes channels world map`); | ||||
|     } | ||||
| @ -52,13 +54,21 @@ export class NodesChannelsMap implements OnInit, OnDestroy { | ||||
|         return zip( | ||||
|           this.assetsService.getWorldMapJson$, | ||||
|           this.apiService.getChannelsGeo$(params.get('public_key') ?? undefined), | ||||
|           [params.get('public_key') ?? undefined] | ||||
|         ).pipe(tap((data) => { | ||||
|           registerMap('world', data[0]); | ||||
| 
 | ||||
|           const channelsLoc = []; | ||||
|           const nodes = []; | ||||
|           const nodesPubkeys = {}; | ||||
|           let thisNodeGPS: number[] | undefined = undefined; | ||||
|           for (const channel of data[1]) { | ||||
|             if (!thisNodeGPS && data[2] === channel[0]) { | ||||
|               thisNodeGPS = [channel[2], channel[3]]; | ||||
|             } else if (!thisNodeGPS && data[2] === channel[4]) { | ||||
|               thisNodeGPS = [channel[6], channel[7]]; | ||||
|             } | ||||
| 
 | ||||
|             channelsLoc.push([[channel[2], channel[3]], [channel[6], channel[7]]]); | ||||
|             if (!nodesPubkeys[channel[0]]) { | ||||
|               nodes.push({ | ||||
| @ -77,6 +87,13 @@ export class NodesChannelsMap implements OnInit, OnDestroy { | ||||
|               nodesPubkeys[channel[4]] = true;   | ||||
|             } | ||||
|           } | ||||
|           if (this.style === 'nodepage' && thisNodeGPS) { | ||||
|             // 1ML 0217890e3aad8d35bc054f43acc00084b25229ecff0ab68debd82883ad65ee8266
 | ||||
|             // New York GPS [-74.0068, 40.7123]
 | ||||
|             // Map center [-20.55, 0, -9.85]
 | ||||
|             this.center = [thisNodeGPS[0] * -20.55 / -74.0068, 0, thisNodeGPS[1] * -9.85 / 40.7123]; | ||||
|           } | ||||
| 
 | ||||
|           this.prepareChartOptions(nodes, channelsLoc); | ||||
|         })); | ||||
|       }) | ||||
| @ -111,10 +128,10 @@ export class NodesChannelsMap implements OnInit, OnDestroy { | ||||
|           } | ||||
|         }, | ||||
|         viewControl: { | ||||
|           center: this.style === 'widget' ? [0, 0, -10] : undefined, | ||||
|           center: this.center, | ||||
|           minDistance: 1, | ||||
|           maxDistance: 60, | ||||
|           distance: this.style === 'widget' ? 22 : 60, | ||||
|           distance: this.style === 'widget' ? 22 : this.style === 'nodepage' ? 22 : 60, | ||||
|           alpha: 90, | ||||
|           rotateSensitivity: 0, | ||||
|           panSensitivity: this.style === 'widget' ? 0 : 1, | ||||
| @ -204,22 +221,4 @@ export class NodesChannelsMap implements OnInit, OnDestroy { | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   onSaveChart() { | ||||
|     // @ts-ignore
 | ||||
|     const prevBottom = this.chartOptions.grid.bottom; | ||||
|     const now = new Date(); | ||||
|     // @ts-ignore
 | ||||
|     this.chartOptions.grid.bottom = 30; | ||||
|     this.chartOptions.backgroundColor = '#11131f'; | ||||
|     this.chartInstance.setOption(this.chartOptions); | ||||
|     download(this.chartInstance.getDataURL({ | ||||
|       pixelRatio: 2, | ||||
|       excludeComponents: ['dataZoom'], | ||||
|     }), `lightning-nodes-heatmap-clearnet-${Math.round(now.getTime() / 1000)}.svg`); | ||||
|     // @ts-ignore
 | ||||
|     this.chartOptions.grid.bottom = prevBottom; | ||||
|     this.chartOptions.backgroundColor = 'none'; | ||||
|     this.chartInstance.setOption(this.chartOptions); | ||||
|   } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user