2
2
ChangeDetectionStrategy ,
3
3
ChangeDetectorRef ,
4
4
Component ,
5
- ElementRef ,
6
5
EventEmitter ,
7
6
Input ,
8
7
OnChanges ,
@@ -13,13 +12,15 @@ import {
13
12
} from '@angular/core' ;
14
13
import { IconType } from '@hypertrace/assets-library' ;
15
14
import { TypedSimpleChanges } from '@hypertrace/common' ;
15
+ import { isEqual } from 'lodash-es' ;
16
16
import { BehaviorSubject , Observable , Subscription } from 'rxjs' ;
17
- import { mergeMap } from 'rxjs/operators' ;
17
+ import { distinctUntilChanged , switchMap } from 'rxjs/operators' ;
18
18
import { IconSize } from '../../icon/icon-size' ;
19
19
import { Filter } from '../filter/filter' ;
20
20
import { FilterAttribute } from '../filter/filter-attribute' ;
21
21
import { FilterUrlService } from '../filter/filter-url.service' ;
22
22
import { FilterBarService } from './filter-bar.service' ;
23
+ import { FilterChipComponent } from './filter-chip/filter-chip.component' ;
23
24
24
25
@Component ( {
25
26
selector : 'ht-filter-bar' ,
@@ -83,14 +84,16 @@ export class FilterBarComponent implements OnChanges, OnInit, OnDestroy {
83
84
@Output ( )
84
85
public readonly filtersChange : EventEmitter < Filter [ ] > = new EventEmitter ( ) ;
85
86
86
- @ViewChild ( 'filterInput' , { read : ElementRef } )
87
- public readonly filterInput ! : ElementRef ;
87
+ @ViewChild ( 'filterInput' )
88
+ public readonly filterInput ?: FilterChipComponent ;
88
89
89
90
public isFocused : boolean = false ;
90
91
91
92
private readonly attributeSubject$ : BehaviorSubject < FilterAttribute [ ] > = new BehaviorSubject < FilterAttribute [ ] > ( [ ] ) ;
92
93
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 ) ) ;
94
97
95
98
private subscription ?: Subscription ;
96
99
@@ -123,7 +126,7 @@ export class FilterBarComponent implements OnChanges, OnInit, OnDestroy {
123
126
124
127
private subscribeToUrlFilterChanges ( ) : void {
125
128
this . subscription = this . attributeSubject$
126
- . pipe ( mergeMap ( attributes => this . filterUrlService . getUrlFiltersChanges$ ( attributes ) ) )
129
+ . pipe ( switchMap ( attributes => this . filterUrlService . getUrlFiltersChanges$ ( attributes ) ) )
127
130
. subscribe ( filters => this . onFiltersChanged ( filters , true , false ) ) ;
128
131
}
129
132
@@ -168,7 +171,7 @@ export class FilterBarComponent implements OnChanges, OnInit, OnDestroy {
168
171
}
169
172
170
173
private resetFocus ( ) : void {
171
- this . filterInput ?. nativeElement . focus ( ) ;
174
+ this . filterInput ?. focus ( ) ;
172
175
}
173
176
174
177
private updateFilter ( oldFilter : Filter , newFilter : Filter ) : void {
0 commit comments