Add date and timestamp search option
This commit is contained in:
		
							parent
							
								
									1c92394563
								
							
						
					
					
						commit
						2584a1f2b0
					
				@ -40,6 +40,8 @@ export class SearchFormComponent implements OnInit {
 | 
			
		||||
  regexBlockhash = /^[0]{8}[a-fA-F0-9]{56}$/;
 | 
			
		||||
  regexTransaction = /^([a-fA-F0-9]{64})(:\d+)?$/;
 | 
			
		||||
  regexBlockheight = /^[0-9]{1,9}$/;
 | 
			
		||||
  regexDate = /^(?:\d{4}[-/]\d{1,2}[-/]\d{1,2}(?: \d{1,2}:\d{2})?)$/;
 | 
			
		||||
  regexUnixTimestamp = /^\d{10}$/;
 | 
			
		||||
  focus$ = new Subject<string>();
 | 
			
		||||
  click$ = new Subject<string>();
 | 
			
		||||
 | 
			
		||||
@ -173,6 +175,8 @@ export class SearchFormComponent implements OnInit {
 | 
			
		||||
          const lightningResults = result[1];
 | 
			
		||||
 | 
			
		||||
          const matchesBlockHeight = this.regexBlockheight.test(searchText);
 | 
			
		||||
          const matchesDateTime = this.regexDate.test(searchText) && new Date(searchText).toString() !== 'Invalid Date';
 | 
			
		||||
          const matchesUnixTimestamp = this.regexUnixTimestamp.test(searchText);
 | 
			
		||||
          const matchesTxId = this.regexTransaction.test(searchText) && !this.regexBlockhash.test(searchText);
 | 
			
		||||
          const matchesBlockHash = this.regexBlockhash.test(searchText);
 | 
			
		||||
          const matchesAddress = !matchesTxId && this.regexAddress.test(searchText);
 | 
			
		||||
@ -181,10 +185,16 @@ export class SearchFormComponent implements OnInit {
 | 
			
		||||
            searchText = 'B' + searchText;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          if (matchesDateTime && searchText.indexOf('/') !== -1) {
 | 
			
		||||
            searchText = searchText.replace(/\//g, '-');
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          return {
 | 
			
		||||
            searchText: searchText,
 | 
			
		||||
            hashQuickMatch: +(matchesBlockHeight || matchesBlockHash || matchesTxId || matchesAddress),
 | 
			
		||||
            hashQuickMatch: +(matchesBlockHeight || matchesBlockHash || matchesTxId || matchesAddress || matchesUnixTimestamp || matchesDateTime),
 | 
			
		||||
            blockHeight: matchesBlockHeight,
 | 
			
		||||
            dateTime: matchesDateTime,
 | 
			
		||||
            unixTimestamp: matchesUnixTimestamp,
 | 
			
		||||
            txId: matchesTxId,
 | 
			
		||||
            blockHash: matchesBlockHash,
 | 
			
		||||
            address: matchesAddress,
 | 
			
		||||
@ -243,6 +253,13 @@ export class SearchFormComponent implements OnInit {
 | 
			
		||||
        } else {
 | 
			
		||||
          this.navigate('/tx/', matches[0]);
 | 
			
		||||
        }
 | 
			
		||||
      } else if (this.regexDate.test(searchText) || this.regexUnixTimestamp.test(searchText)) {
 | 
			
		||||
        let timestamp: number;
 | 
			
		||||
        this.regexDate.test(searchText) ? timestamp = Math.floor(new Date(searchText).getTime() / 1000) : timestamp = searchText;
 | 
			
		||||
        this.apiService.getBlockDataFromTimestamp$(timestamp).subscribe(
 | 
			
		||||
          (data) => { this.navigate('/block/', data.hash); },
 | 
			
		||||
          (error) => { console.log(error); this.isSearching = false; }
 | 
			
		||||
        );
 | 
			
		||||
      } else {
 | 
			
		||||
        this.searchResults.searchButtonClick();
 | 
			
		||||
        this.isSearching = false;
 | 
			
		||||
 | 
			
		||||
@ -5,6 +5,18 @@
 | 
			
		||||
      <ng-container *ngTemplateOutlet="goTo; context: { $implicit: results.searchText }"></ng-container>
 | 
			
		||||
    </button>
 | 
			
		||||
  </ng-template>
 | 
			
		||||
  <ng-template [ngIf]="results.dateTime">
 | 
			
		||||
    <div class="card-title" i18n="search.bitcoin-block-date">Date</div>
 | 
			
		||||
    <button (click)="clickItem(0)" [class.active]="0 === activeIdx" type="button" role="option" class="dropdown-item">
 | 
			
		||||
      <ng-container *ngTemplateOutlet="goTo; context: { $implicit: results.searchText }"></ng-container>
 | 
			
		||||
    </button>
 | 
			
		||||
  </ng-template>
 | 
			
		||||
  <ng-template [ngIf]="results.unixTimestamp">
 | 
			
		||||
    <div class="card-title" i18n="search.bitcoin-block-timestamp">Timestamp</div>
 | 
			
		||||
    <button (click)="clickItem(0)" [class.active]="0 === activeIdx" type="button" role="option" class="dropdown-item">
 | 
			
		||||
      <ng-container *ngTemplateOutlet="goTo; context: { $implicit: results.searchText }"></ng-container>
 | 
			
		||||
    </button>
 | 
			
		||||
  </ng-template>
 | 
			
		||||
  <ng-template [ngIf]="results.txId">
 | 
			
		||||
    <div class="card-title" i18n="search.bitcoin-transaction">Bitcoin Transaction</div>
 | 
			
		||||
    <button (click)="clickItem(0)" [class.active]="0 === activeIdx" type="button" role="option" class="dropdown-item">
 | 
			
		||||
 | 
			
		||||
@ -227,6 +227,10 @@ export class ApiService {
 | 
			
		||||
    return this.httpClient.get<BlockExtended>(this.apiBaseUrl + this.apiBasePath + '/api/v1/block/' + hash);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getBlockDataFromTimestamp$(timestamp: number): Observable<any> {
 | 
			
		||||
    return this.httpClient.get<number>(this.apiBaseUrl + this.apiBasePath + '/api/v1/mining/blocks/timestamp/' + timestamp);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getStrippedBlockTransactions$(hash: string): Observable<TransactionStripped[]> {
 | 
			
		||||
    return this.httpClient.get<TransactionStripped[]>(this.apiBaseUrl + this.apiBasePath + '/api/v1/block/' + hash + '/summary');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user