[search bar] auto focus only in dashboards
This commit is contained in:
		
							parent
							
								
									caa8cfbc0e
								
							
						
					
					
						commit
						6ce3c1d75d
					
				@ -1,6 +1,7 @@
 | 
			
		||||
import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';
 | 
			
		||||
import { AfterViewChecked, ChangeDetectionStrategy, Component, OnInit } from '@angular/core';
 | 
			
		||||
import { SeoService } from '../../services/seo.service';
 | 
			
		||||
import { WebsocketService } from '../../services/websocket.service';
 | 
			
		||||
import { StateService } from '../../services/state.service';
 | 
			
		||||
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'app-mining-dashboard',
 | 
			
		||||
@ -8,10 +9,11 @@ import { WebsocketService } from '../../services/websocket.service';
 | 
			
		||||
  styleUrls: ['./mining-dashboard.component.scss'],
 | 
			
		||||
  changeDetection: ChangeDetectionStrategy.OnPush,
 | 
			
		||||
})
 | 
			
		||||
export class MiningDashboardComponent implements OnInit {
 | 
			
		||||
export class MiningDashboardComponent implements OnInit, AfterViewChecked {
 | 
			
		||||
  constructor(
 | 
			
		||||
    private seoService: SeoService,
 | 
			
		||||
    private websocketService: WebsocketService,
 | 
			
		||||
    private stateService: StateService
 | 
			
		||||
  ) {
 | 
			
		||||
    this.seoService.setTitle($localize`:@@a681a4e2011bb28157689dbaa387de0dd0aa0c11:Mining Dashboard`);
 | 
			
		||||
  }
 | 
			
		||||
@ -19,4 +21,8 @@ export class MiningDashboardComponent implements OnInit {
 | 
			
		||||
  ngOnInit(): void {
 | 
			
		||||
    this.websocketService.want(['blocks', 'mempool-blocks', 'stats']);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ngAfterViewChecked(): void {
 | 
			
		||||
    this.stateService.searchFocus$.next(true);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
<form [formGroup]="searchForm" (submit)="searchForm.valid && search()" novalidate>
 | 
			
		||||
  <div class="d-flex">
 | 
			
		||||
    <div class="search-box-container mr-2">
 | 
			
		||||
      <input autofocus (focus)="focus$.next($any($event).target.value)" (click)="click$.next($any($event).target.value)" formControlName="searchText" type="text" class="form-control" i18n-placeholder="search-form.searchbar-placeholder" placeholder="Explore the full Bitcoin ecosystem">
 | 
			
		||||
      <input #searchInput (focus)="focus$.next($any($event).target.value)" (click)="click$.next($any($event).target.value)" formControlName="searchText" type="text" class="form-control" i18n-placeholder="search-form.searchbar-placeholder" placeholder="Explore the full Bitcoin ecosystem">
 | 
			
		||||
      <app-search-results #searchResults [hidden]="dropdownHidden" [results]="typeAhead$ | async" (selectedResult)="selectedResult($event)"></app-search-results>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div>
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
import { Component, OnInit, ChangeDetectionStrategy, EventEmitter, Output, ViewChild, HostListener, ElementRef } from '@angular/core';
 | 
			
		||||
import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
 | 
			
		||||
import { Router } from '@angular/router';
 | 
			
		||||
import { EventType, NavigationStart, Router } from '@angular/router';
 | 
			
		||||
import { AssetsService } from '../../services/assets.service';
 | 
			
		||||
import { StateService } from '../../services/state.service';
 | 
			
		||||
import { Observable, of, Subject, zip, BehaviorSubject, combineLatest } from 'rxjs';
 | 
			
		||||
@ -47,6 +47,8 @@ export class SearchFormComponent implements OnInit {
 | 
			
		||||
    this.handleKeyDown($event);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @ViewChild('searchInput') searchInput: ElementRef;
 | 
			
		||||
 | 
			
		||||
  constructor(
 | 
			
		||||
    private formBuilder: UntypedFormBuilder,
 | 
			
		||||
    private router: Router,
 | 
			
		||||
@ -55,11 +57,24 @@ export class SearchFormComponent implements OnInit {
 | 
			
		||||
    private electrsApiService: ElectrsApiService,
 | 
			
		||||
    private apiService: ApiService,
 | 
			
		||||
    private relativeUrlPipe: RelativeUrlPipe,
 | 
			
		||||
    private elementRef: ElementRef,
 | 
			
		||||
  ) { }
 | 
			
		||||
    private elementRef: ElementRef
 | 
			
		||||
  ) {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ngOnInit(): void {
 | 
			
		||||
    this.stateService.networkChanged$.subscribe((network) => this.network = network);
 | 
			
		||||
    
 | 
			
		||||
    this.router.events.subscribe((e: NavigationStart) => { // Reset search focus when changing page
 | 
			
		||||
      if (e.type === EventType.NavigationStart) {
 | 
			
		||||
        this.searchInput.nativeElement.blur();
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    this.stateService.searchFocus$.subscribe(focus => {
 | 
			
		||||
      if (this.searchInput && focus === true) {
 | 
			
		||||
        this.searchInput.nativeElement.focus();
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    this.searchForm = this.formBuilder.group({
 | 
			
		||||
      searchText: ['', Validators.required],
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core';
 | 
			
		||||
import { AfterViewChecked, ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core';
 | 
			
		||||
import { combineLatest, merge, Observable, of, Subscription } from 'rxjs';
 | 
			
		||||
import { filter, map, scan, share, switchMap, tap } from 'rxjs/operators';
 | 
			
		||||
import { BlockExtended, OptimizedMempoolStats, RbfTree } from '../interfaces/node-api.interface';
 | 
			
		||||
import { BlockExtended, OptimizedMempoolStats } from '../interfaces/node-api.interface';
 | 
			
		||||
import { MempoolInfo, TransactionStripped, ReplacementInfo } from '../interfaces/websocket.interface';
 | 
			
		||||
import { ApiService } from '../services/api.service';
 | 
			
		||||
import { StateService } from '../services/state.service';
 | 
			
		||||
@ -31,7 +31,7 @@ interface MempoolStatsData {
 | 
			
		||||
  styleUrls: ['./dashboard.component.scss'],
 | 
			
		||||
  changeDetection: ChangeDetectionStrategy.OnPush
 | 
			
		||||
})
 | 
			
		||||
export class DashboardComponent implements OnInit, OnDestroy {
 | 
			
		||||
export class DashboardComponent implements OnInit, OnDestroy, AfterViewChecked {
 | 
			
		||||
  featuredAssets$: Observable<any>;
 | 
			
		||||
  network$: Observable<string>;
 | 
			
		||||
  mempoolBlocksData$: Observable<MempoolBlocksData>;
 | 
			
		||||
@ -57,6 +57,10 @@ export class DashboardComponent implements OnInit, OnDestroy {
 | 
			
		||||
    private seoService: SeoService
 | 
			
		||||
  ) { }
 | 
			
		||||
 | 
			
		||||
  ngAfterViewChecked(): void {
 | 
			
		||||
    this.stateService.searchFocus$.next(true);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ngOnDestroy(): void {
 | 
			
		||||
    this.currencySubscription.unsubscribe();
 | 
			
		||||
    this.websocketService.stopTrackRbfSummary();
 | 
			
		||||
 | 
			
		||||
@ -138,6 +138,8 @@ export class StateService {
 | 
			
		||||
  fiatCurrency$: BehaviorSubject<string>;
 | 
			
		||||
  rateUnits$: BehaviorSubject<string>;
 | 
			
		||||
 | 
			
		||||
  searchFocus$: Subject<boolean> = new Subject<boolean>();
 | 
			
		||||
 | 
			
		||||
  constructor(
 | 
			
		||||
    @Inject(PLATFORM_ID) private platformId: any,
 | 
			
		||||
    @Inject(LOCALE_ID) private locale: string,
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user