modules/search-bar-component/src/search-bar.component.ts
Search bar component for searching products by name
| selector | app-search-bar | 
            
| styleUrls | search-bar.component.scss | 
            
| templateUrl | search-bar.component.html | 
            
                            constructor(productService: any, router: any)
                         | 
                    
| change | 
    change(query: any)
                         | 
                    
| 
                                 On input name in text input 
                                        Parameters :
                                         
                                
 
                                    Returns:      
                                    void
    
                                 | 
                    
| onSelect | 
    onSelect(productId: any)
                         | 
                    
| 
                                 On select product navigate to product page 
                                        Parameters :
                                         
                                
 
                                    Returns:      
                                    void
    
                                 | 
                    
| inputSubject | 
                            inputSubject:      | 
                    
| 
                             RxJs Subject  | 
                    
| products | 
                            products:      | 
                    
| 
                             Searched products  | 
                    
| queryString | 
                            queryString:      | 
                    
| 
                             Name query for searching  | 
                    
import { Router } from '@angular/router';
import { ProductService } from '@nodeart/productservice/index';
import { Subject } from 'rxjs';
import { Component, OnInit, ViewChild } from '@angular/core';
/**
 * Search bar component for searching products by name
 */
@Component({
  selector: 'app-search-bar',
  templateUrl: './search-bar.component.html',
  styleUrls: ['./search-bar.component.scss']
})
export class SearchBarComponent implements OnInit {
  /**
   * RxJs Subject 
   */
  inputSubject = new Subject<string>();
  /**
   * Searched products
   */
  products = [];
  
  /**
   * Name query for searching
   */
  @ViewChild('query') queryString;
  constructor(protected productService: ProductService, protected router: Router) { }
  ngOnInit() {
    this.inputSubject.debounceTime(500).subscribe(query => {
      this.productService.getProducts(query, 5).subscribe( data => {
        console.log(data.val());
        console.log(this.queryString.nativeElement.value.length);
        if(data.val() && data.val()['total'] > 0 && this.queryString.nativeElement.value.length > 0){
          console.log(data.val());
          this.products = data.val()['hits'].map(product => {
            product['_source']['id'] = product['_id'];
            return product['_source'];
          });    
          console.log(this.products);
        } else {
          this.products = [];
        }
      });
    });
  }
  /**
   * On input name in text input
   * @param {string} query name query
   */
  change(query){
    if(query.length > 0){
      this.inputSubject.next(query);
    }else{
      this.products = [];
    }
  }
  /**
   * On select product navigate to product page
   * @param {string} productId product id
   */
  onSelect(productId){
    this.router.navigate(['product', productId]);
    this.products = [];
    this.queryString.nativeElement.value = "";
  }
}