Merge branch 'master' into natsoni/fix-lightning-search
This commit is contained in:
		
						commit
						67afda7dcf
					
				| @ -3,7 +3,7 @@ import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; | |||||||
| import { ActivatedRoute, Router } from '@angular/router'; | import { ActivatedRoute, Router } from '@angular/router'; | ||||||
| import { EChartsOption, PieSeriesOption } from '../../graphs/echarts'; | import { EChartsOption, PieSeriesOption } from '../../graphs/echarts'; | ||||||
| import { merge, Observable } from 'rxjs'; | import { merge, Observable } from 'rxjs'; | ||||||
| import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; | import { map, shareReplay, startWith, switchMap, tap } from 'rxjs/operators'; | ||||||
| import { SeoService } from '../../services/seo.service'; | import { SeoService } from '../../services/seo.service'; | ||||||
| import { StorageService } from '../..//services/storage.service'; | import { StorageService } from '../..//services/storage.service'; | ||||||
| import { MiningService, MiningStats } from '../../services/mining.service'; | import { MiningService, MiningStats } from '../../services/mining.service'; | ||||||
| @ -107,7 +107,7 @@ export class PoolRankingComponent implements OnInit { | |||||||
|           this.isLoading = false; |           this.isLoading = false; | ||||||
|           this.prepareChartOptions(data); |           this.prepareChartOptions(data); | ||||||
|         }), |         }), | ||||||
|         share() |         shareReplay(1) | ||||||
|       ); |       ); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -195,6 +195,7 @@ export class SearchFormComponent implements OnInit { | |||||||
|           const matchesTxId = this.regexTransaction.test(searchText) && !this.regexBlockhash.test(searchText); |           const matchesTxId = this.regexTransaction.test(searchText) && !this.regexBlockhash.test(searchText); | ||||||
|           const matchesBlockHash = this.regexBlockhash.test(searchText); |           const matchesBlockHash = this.regexBlockhash.test(searchText); | ||||||
|           const matchesAddress = !matchesTxId && this.regexAddress.test(searchText); |           const matchesAddress = !matchesTxId && this.regexAddress.test(searchText); | ||||||
|  |           const publicKey = matchesAddress && searchText.startsWith('0'); | ||||||
|           const otherNetworks = findOtherNetworks(searchText, this.network as any || 'mainnet', this.env); |           const otherNetworks = findOtherNetworks(searchText, this.network as any || 'mainnet', this.env); | ||||||
|           const liquidAsset = this.assets ? (this.assets[searchText] || []) : []; |           const liquidAsset = this.assets ? (this.assets[searchText] || []) : []; | ||||||
|           const pools = this.pools.filter(pool => pool["name"].toLowerCase().includes(searchText.toLowerCase())).slice(0, 10); |           const pools = this.pools.filter(pool => pool["name"].toLowerCase().includes(searchText.toLowerCase())).slice(0, 10); | ||||||
| @ -203,6 +204,10 @@ export class SearchFormComponent implements OnInit { | |||||||
|             searchText = searchText.replace(/\//g, '-'); |             searchText = searchText.replace(/\//g, '-'); | ||||||
|           } |           } | ||||||
| 
 | 
 | ||||||
|  |           if (publicKey) { | ||||||
|  |             otherNetworks.length = 0; | ||||||
|  |           } | ||||||
|  | 
 | ||||||
|           return { |           return { | ||||||
|             searchText: searchText, |             searchText: searchText, | ||||||
|             hashQuickMatch: +(matchesBlockHeight || matchesBlockHash || matchesTxId || matchesAddress || matchesUnixTimestamp || matchesDateTime), |             hashQuickMatch: +(matchesBlockHeight || matchesBlockHash || matchesTxId || matchesAddress || matchesUnixTimestamp || matchesDateTime), | ||||||
| @ -212,6 +217,7 @@ export class SearchFormComponent implements OnInit { | |||||||
|             txId: matchesTxId, |             txId: matchesTxId, | ||||||
|             blockHash: matchesBlockHash, |             blockHash: matchesBlockHash, | ||||||
|             address: matchesAddress, |             address: matchesAddress, | ||||||
|  |             publicKey: publicKey, | ||||||
|             addresses: matchesAddress && addressPrefixSearchResults.length === 1 && searchText === addressPrefixSearchResults[0] ? [] : addressPrefixSearchResults, // If there is only one address and it matches the search text, don't show it in the dropdown
 |             addresses: matchesAddress && addressPrefixSearchResults.length === 1 && searchText === addressPrefixSearchResults[0] ? [] : addressPrefixSearchResults, // If there is only one address and it matches the search text, don't show it in the dropdown
 | ||||||
|             otherNetworks: otherNetworks, |             otherNetworks: otherNetworks, | ||||||
|             nodes: lightningResults.nodes, |             nodes: lightningResults.nodes, | ||||||
|  | |||||||
| @ -23,7 +23,7 @@ | |||||||
|       <ng-container *ngTemplateOutlet="goTo; context: { $implicit: results.searchText | shortenString : 13 }"></ng-container> |       <ng-container *ngTemplateOutlet="goTo; context: { $implicit: results.searchText | shortenString : 13 }"></ng-container> | ||||||
|     </button> |     </button> | ||||||
|   </ng-template> |   </ng-template> | ||||||
|   <ng-template [ngIf]="results.address"> |   <ng-template [ngIf]="results.address && !results.publicKey"> | ||||||
|     <div class="card-title" i18n="search.bitcoin-address">{{ networkName }} Address</div> |     <div class="card-title" i18n="search.bitcoin-address">{{ networkName }} Address</div> | ||||||
|     <button (click)="clickItem(0)" [class.active]="0 === activeIdx" type="button" role="option" class="dropdown-item"> |     <button (click)="clickItem(0)" [class.active]="0 === activeIdx" type="button" role="option" class="dropdown-item"> | ||||||
|       <ng-container *ngTemplateOutlet="goTo; context: { $implicit: results.searchText | shortenString : isMobile ? 17 : 30 }"></ng-container> |       <ng-container *ngTemplateOutlet="goTo; context: { $implicit: results.searchText | shortenString : isMobile ? 17 : 30 }"></ng-container> | ||||||
| @ -35,26 +35,26 @@ | |||||||
|       <ng-container *ngTemplateOutlet="goTo; context: { $implicit: results.searchText | shortenString : 13 }"></ng-container> |       <ng-container *ngTemplateOutlet="goTo; context: { $implicit: results.searchText | shortenString : 13 }"></ng-container> | ||||||
|     </button> |     </button> | ||||||
|   </ng-template> |   </ng-template> | ||||||
|   <ng-template [ngIf]="results.otherNetworks.length"> |  | ||||||
|     <div class="card-title danger" i18n="search.other-networks">Other Network Address</div> |  | ||||||
|     <ng-template ngFor [ngForOf]="results.otherNetworks" let-otherNetwork let-i="index"> |  | ||||||
|       <button (click)="clickItem(results.hashQuickMatch + i)" [class.active]="(results.hashQuickMatch + i) === activeIdx" [class.inactive]="!otherNetwork.isNetworkAvailable" type="button" role="option" class="dropdown-item"> |  | ||||||
|         <ng-container *ngTemplateOutlet="goTo; context: { $implicit: otherNetwork.address| shortenString : isMobile ? 12 : 20 }"></ng-container> <b>({{ otherNetwork.network.charAt(0).toUpperCase() + otherNetwork.network.slice(1) }})</b> |  | ||||||
|       </button> |  | ||||||
|     </ng-template> |  | ||||||
|   </ng-template> |  | ||||||
|   <ng-template [ngIf]="results.addresses.length"> |   <ng-template [ngIf]="results.addresses.length"> | ||||||
|     <div class="card-title" i18n="search.bitcoin-addresses">{{ networkName }} Addresses</div> |     <div class="card-title" i18n="search.bitcoin-addresses">{{ networkName }} Addresses</div> | ||||||
|     <ng-template ngFor [ngForOf]="results.addresses" let-address let-i="index"> |     <ng-template ngFor [ngForOf]="results.addresses" let-address let-i="index"> | ||||||
|       <button (click)="clickItem(results.hashQuickMatch + results.otherNetworks.length + i)" [class.active]="(results.hashQuickMatch + results.otherNetworks.length + i) === activeIdx" type="button" role="option" class="dropdown-item"> |       <button (click)="clickItem(results.hashQuickMatch + i)" [class.active]="(results.hashQuickMatch + i) === activeIdx" type="button" role="option" class="dropdown-item"> | ||||||
|         <ngb-highlight [result]="address | shortenString : isMobile ? 25 : 36" [term]="results.searchText"></ngb-highlight> |         <ngb-highlight [result]="address | shortenString : isMobile ? 25 : 36" [term]="results.searchText"></ngb-highlight> | ||||||
|       </button> |       </button> | ||||||
|     </ng-template> |     </ng-template> | ||||||
|   </ng-template> |   </ng-template> | ||||||
|  |   <ng-template [ngIf]="results.pools.length"> | ||||||
|  |     <div class="card-title" i18n="search.mining-pools">Mining Pools</div> | ||||||
|  |     <ng-template ngFor [ngForOf]="results.pools" let-pool let-i="index"> | ||||||
|  |       <button (click)="clickItem(results.hashQuickMatch + results.addresses.length + i)" [class.active]="results.hashQuickMatch + results.addresses.length + i === activeIdx" [class.inactive]="!pool.active" type="button" role="option" class="dropdown-item"> | ||||||
|  |         <ngb-highlight [result]="pool.name" [term]="results.searchText"></ngb-highlight> | ||||||
|  |       </button> | ||||||
|  |     </ng-template> | ||||||
|  |   </ng-template> | ||||||
|   <ng-template [ngIf]="results.nodes.length"> |   <ng-template [ngIf]="results.nodes.length"> | ||||||
|     <div class="card-title" i18n="search.lightning-nodes">Lightning Nodes</div> |     <div class="card-title" i18n="search.lightning-nodes">Lightning Nodes</div> | ||||||
|     <ng-template ngFor [ngForOf]="results.nodes" let-node let-i="index"> |     <ng-template ngFor [ngForOf]="results.nodes" let-node let-i="index"> | ||||||
|       <button (click)="clickItem(results.hashQuickMatch + results.otherNetworks.length + results.addresses.length + i)" [class.inactive]="node.status === 0" [class.active]="results.hashQuickMatch + results.otherNetworks.length + results.addresses.length + i === activeIdx" [routerLink]="['/lightning/node' | relativeUrl, node.public_key]" type="button" role="option" class="dropdown-item"> |       <button (click)="clickItem(results.hashQuickMatch + results.addresses.length + results.pools.length + i)" [class.inactive]="node.status === 0" [class.active]="results.hashQuickMatch + results.addresses.length + results.pools.length + i === activeIdx" [routerLink]="['/lightning/node' | relativeUrl, node.public_key]" type="button" role="option" class="dropdown-item"> | ||||||
|         <ngb-highlight [result]="node.alias" [term]="results.searchText"></ngb-highlight>  <span class="symbol">{{ node.public_key | shortenString : 10 }}</span> |         <ngb-highlight [result]="node.alias" [term]="results.searchText"></ngb-highlight>  <span class="symbol">{{ node.public_key | shortenString : 10 }}</span> | ||||||
|       </button> |       </button> | ||||||
|     </ng-template> |     </ng-template> | ||||||
| @ -62,19 +62,25 @@ | |||||||
|   <ng-template [ngIf]="results.channels.length"> |   <ng-template [ngIf]="results.channels.length"> | ||||||
|     <div class="card-title" i18n="search.lightning-channels">Lightning Channels</div> |     <div class="card-title" i18n="search.lightning-channels">Lightning Channels</div> | ||||||
|     <ng-template ngFor [ngForOf]="results.channels" let-channel let-i="index"> |     <ng-template ngFor [ngForOf]="results.channels" let-channel let-i="index"> | ||||||
|       <button (click)="clickItem(results.hashQuickMatch + results.otherNetworks.length + results.addresses.length + results.nodes.length + i)" [class.inactive]="channel.status === 2"  [class.active]="results.hashQuickMatch + results.otherNetworks.length + results.addresses.length + results.nodes.length + i === activeIdx" type="button" role="option" class="dropdown-item"> |       <button (click)="clickItem(results.hashQuickMatch + results.addresses.length + results.pools.length + results.nodes.length + i)" [class.inactive]="channel.status === 2" [class.active]="results.hashQuickMatch + results.addresses.length + results.pools.length + results.nodes.length + i === activeIdx" type="button" role="option" class="dropdown-item"> | ||||||
|         <ngb-highlight [result]="channel.short_id" [term]="results.searchText"></ngb-highlight>  <span class="symbol">{{ channel.id }}</span> |         <ngb-highlight [result]="channel.short_id" [term]="results.searchText"></ngb-highlight>  <span class="symbol">{{ channel.id }}</span> | ||||||
|       </button> |       </button> | ||||||
|     </ng-template> |     </ng-template> | ||||||
|   </ng-template> |   </ng-template> | ||||||
|   <ng-template [ngIf]="results.pools.length"> |   <ng-template [ngIf]="results.otherNetworks.length"> | ||||||
|     <div class="card-title" i18n="search.mining-pools">Mining Pools</div> |     <div class="card-title danger" i18n="search.other-networks">Other Network Address</div> | ||||||
|     <ng-template ngFor [ngForOf]="results.pools" let-pool let-i="index"> |     <ng-template ngFor [ngForOf]="results.otherNetworks" let-otherNetwork let-i="index"> | ||||||
|       <button (click)="clickItem(results.hashQuickMatch + results.otherNetworks.length + results.addresses.length + results.nodes.length + results.channels.length + i)" [class.active]="results.hashQuickMatch + results.otherNetworks.length + results.addresses.length + results.nodes.length + results.channels.length + i === activeIdx" [class.inactive]="!pool.active" type="button" role="option" class="dropdown-item"> |       <button (click)="clickItem(results.hashQuickMatch + results.addresses.length + results.pools.length + results.nodes.length + results.channels.length + i)" [class.active]="(results.hashQuickMatch + results.addresses.length + results.pools.length + results.nodes.length + results.channels.length + i) === activeIdx" [class.inactive]="!otherNetwork.isNetworkAvailable" type="button" role="option" class="dropdown-item"> | ||||||
|         <ngb-highlight [result]="pool.name" [term]="results.searchText"></ngb-highlight> |         <ng-container *ngTemplateOutlet="goTo; context: { $implicit: otherNetwork.address | shortenString : isMobile ? 12 : 20 }"></ng-container> <b>({{ otherNetwork.network.charAt(0).toUpperCase() + otherNetwork.network.slice(1) }})</b> | ||||||
|       </button> |       </button> | ||||||
|     </ng-template> |     </ng-template> | ||||||
|   </ng-template> |   </ng-template> | ||||||
|  |   <ng-template [ngIf]="results.address && results.publicKey"> | ||||||
|  |     <div class="card-title" i18n="search.bitcoin-address">{{ networkName }} Address</div> | ||||||
|  |     <button (click)="clickItem(0)" [class.active]="0 === activeIdx" type="button" role="option" class="dropdown-item"> | ||||||
|  |       <ng-container *ngTemplateOutlet="goTo; context: { $implicit: results.searchText | shortenString : isMobile ? 17 : 30 }"></ng-container> | ||||||
|  |     </button> | ||||||
|  |   </ng-template> | ||||||
|   <ng-template [ngIf]="results.liquidAsset.length"> |   <ng-template [ngIf]="results.liquidAsset.length"> | ||||||
|     <div class="card-title" i18n="search.liquid-asset">Liquid Asset</div> |     <div class="card-title" i18n="search.liquid-asset">Liquid Asset</div> | ||||||
|     <button (click)="clickItem(0)" [class.active]="0 === activeIdx" type="button" role="option" class="dropdown-item"> |     <button (click)="clickItem(0)" [class.active]="0 === activeIdx" type="button" role="option" class="dropdown-item"> | ||||||
|  | |||||||
| @ -27,7 +27,11 @@ export class SearchResultsComponent implements OnChanges { | |||||||
|   ngOnChanges() { |   ngOnChanges() { | ||||||
|     this.activeIdx = 0; |     this.activeIdx = 0; | ||||||
|     if (this.results) { |     if (this.results) { | ||||||
|       this.resultsFlattened = [...(this.results.hashQuickMatch ? [this.results.searchText] : []), ...this.results.otherNetworks, ...this.results.addresses, ...this.results.nodes, ...this.results.channels, ...this.results.pools]; |       this.resultsFlattened = [...(this.results.hashQuickMatch ? [this.results.searchText] : []), ...this.results.addresses, ...this.results.pools, ...this.results.nodes, ...this.results.channels, ...this.results.otherNetworks]; | ||||||
|  |       // If searchText is a public key corresponding to a node, select it by default
 | ||||||
|  |       if (this.results.publicKey && this.results.nodes.length > 0) { | ||||||
|  |         this.activeIdx = 1; | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user