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 = "";
}
}