From ef2309f0f1d1b1e4be9eeb33142f3beb8d08a90f Mon Sep 17 00:00:00 2001 From: "DESKTOP-P9VU163\\admin" Date: Wed, 25 Jun 2025 10:37:00 +0300 Subject: [PATCH] add Edit the HeroSearchComponent class --- src/app/hero-search/hero-search.component.ts | 39 +++++++++++++++++--- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/src/app/hero-search/hero-search.component.ts b/src/app/hero-search/hero-search.component.ts index e9e104c..ec60b9c 100644 --- a/src/app/hero-search/hero-search.component.ts +++ b/src/app/hero-search/hero-search.component.ts @@ -1,11 +1,40 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; + +import { Observable, Subject } from 'rxjs'; + +import { + debounceTime, distinctUntilChanged, switchMap + } from 'rxjs/operators'; + +import { Hero } from '../hero'; +import { HeroService } from '../hero.service'; @Component({ selector: 'app-hero-search', - imports: [], templateUrl: './hero-search.component.html', - styleUrl: './hero-search.component.css' + styleUrls: [ './hero-search.component.css' ] }) -export class HeroSearch { +export class HeroSearchComponent implements OnInit { + heroes$!: Observable; + private searchTerms = new Subject(); -} + constructor(private heroService: HeroService) {} + + // Push a search term into the observable stream. + search(term: string): void { + this.searchTerms.next(term); + } + + ngOnInit(): void { + this.heroes$ = this.searchTerms.pipe( + // wait 300ms after each keystroke before considering the term + debounceTime(300), + + // ignore new term if same as previous term + distinctUntilChanged(), + + // switch to new search observable each time the term changes + switchMap((term: string) => this.heroService.searchHeroes(term)), + ); + } +} \ No newline at end of file