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