22 ChangeDetectionStrategy ,
33 ChangeDetectorRef ,
44 Component ,
5- ElementRef ,
65 EventEmitter ,
76 Input ,
87 OnChanges ,
@@ -13,13 +12,15 @@ import {
1312} from '@angular/core' ;
1413import { IconType } from '@hypertrace/assets-library' ;
1514import { TypedSimpleChanges } from '@hypertrace/common' ;
15+ import { isEqual } from 'lodash-es' ;
1616import { BehaviorSubject , Observable , Subscription } from 'rxjs' ;
17- import { mergeMap } from 'rxjs/operators' ;
17+ import { distinctUntilChanged , switchMap } from 'rxjs/operators' ;
1818import { IconSize } from '../../icon/icon-size' ;
1919import { Filter } from '../filter/filter' ;
2020import { FilterAttribute } from '../filter/filter-attribute' ;
2121import { FilterUrlService } from '../filter/filter-url.service' ;
2222import { FilterBarService } from './filter-bar.service' ;
23+ import { FilterChipComponent } from './filter-chip/filter-chip.component' ;
2324
2425@Component ( {
2526 selector : 'ht-filter-bar' ,
@@ -83,14 +84,16 @@ export class FilterBarComponent implements OnChanges, OnInit, OnDestroy {
8384 @Output ( )
8485 public readonly filtersChange : EventEmitter < Filter [ ] > = new EventEmitter ( ) ;
8586
86- @ViewChild ( 'filterInput' , { read : ElementRef } )
87- public readonly filterInput ! : ElementRef ;
87+ @ViewChild ( 'filterInput' )
88+ public readonly filterInput ?: FilterChipComponent ;
8889
8990 public isFocused : boolean = false ;
9091
9192 private readonly attributeSubject$ : BehaviorSubject < FilterAttribute [ ] > = new BehaviorSubject < FilterAttribute [ ] > ( [ ] ) ;
9293 private readonly internalFiltersSubject$ : BehaviorSubject < Filter [ ] > = new BehaviorSubject < Filter [ ] > ( [ ] ) ;
93- public readonly internalFilters$ : Observable < Filter [ ] > = this . internalFiltersSubject$ . asObservable ( ) ;
94+ public readonly internalFilters$ : Observable < Filter [ ] > = this . internalFiltersSubject$
95+ . asObservable ( )
96+ . pipe ( distinctUntilChanged ( isEqual ) ) ;
9497
9598 private subscription ?: Subscription ;
9699
@@ -123,7 +126,7 @@ export class FilterBarComponent implements OnChanges, OnInit, OnDestroy {
123126
124127 private subscribeToUrlFilterChanges ( ) : void {
125128 this . subscription = this . attributeSubject$
126- . pipe ( mergeMap ( attributes => this . filterUrlService . getUrlFiltersChanges$ ( attributes ) ) )
129+ . pipe ( switchMap ( attributes => this . filterUrlService . getUrlFiltersChanges$ ( attributes ) ) )
127130 . subscribe ( filters => this . onFiltersChanged ( filters , true , false ) ) ;
128131 }
129132
@@ -168,7 +171,7 @@ export class FilterBarComponent implements OnChanges, OnInit, OnDestroy {
168171 }
169172
170173 private resetFocus ( ) : void {
171- this . filterInput ?. nativeElement . focus ( ) ;
174+ this . filterInput ?. focus ( ) ;
172175 }
173176
174177 private updateFilter ( oldFilter : Filter , newFilter : Filter ) : void {
0 commit comments