@@ -29,12 +29,13 @@ import { Renderer } from '@hypertrace/hyperdash';
2929import { RendererApi , RENDERER_API } from '@hypertrace/hyperdash-angular' ;
3030import { capitalize , isEmpty , pick } from 'lodash-es' ;
3131import { BehaviorSubject , combineLatest , Observable , of , Subject } from 'rxjs' ;
32- import { filter , first , map , pairwise , share , startWith , switchMap , tap } from 'rxjs/operators' ;
32+ import { filter , map , pairwise , share , startWith , switchMap , take , tap } from 'rxjs/operators' ;
3333import { AttributeMetadata , toFilterAttributeType } from '../../../graphql/model/metadata/attribute-metadata' ;
3434import { MetadataService } from '../../../services/metadata/metadata.service' ;
3535import { InteractionHandler } from '../../interaction/interaction-handler' ;
3636import { TableWidgetBaseModel } from './table-widget-base.model' ;
3737import { SpecificationBackedTableColumnDef } from './table-widget-column.model' ;
38+ import { LabeledTableControlOption } from './table-widget-control.model' ;
3839import { TableWidgetViewToggleModel } from './table-widget-view-toggle.model' ;
3940import { TableWidgetModel } from './table-widget.model' ;
4041
@@ -167,7 +168,7 @@ export class TableWidgetRendererComponent
167168 . map ( selectControlModel =>
168169 // Fetch the values for the selectFilter dropdown
169170 selectControlModel . getOptions ( ) . pipe (
170- first ( ) ,
171+ take ( 1 ) ,
171172 map ( options => {
172173 const selectOptions = options . map ( option => ( {
173174 label : option . label ,
@@ -191,7 +192,7 @@ export class TableWidgetRendererComponent
191192 . filter ( checkboxControlModel => checkboxControlModel . visible )
192193 . map ( checkboxControlModel =>
193194 checkboxControlModel . getOptions ( ) . pipe (
194- first ( ) ,
195+ take ( 1 ) ,
195196 map ( options => ( {
196197 label : checkboxControlModel . checked ? options [ 0 ] . label : options [ 1 ] . label ,
197198 value : checkboxControlModel . checked ,
@@ -300,7 +301,8 @@ export class TableWidgetRendererComponent
300301 this . selectFilterSubject . next ( this . mergeFilters ( changed . option . metaValue ) ) ;
301302 break ;
302303 case TableControlOptionType . UnsetFilter :
303- break ; // Not supported - No use case yet
304+ this . selectFilterSubject . next ( this . removeFilters ( changed . option . metaValue ) ) ;
305+ break ;
304306 default :
305307 assertUnreachable ( changed . option ) ;
306308 }
@@ -310,10 +312,10 @@ export class TableWidgetRendererComponent
310312 this . checkboxControls$ = forkJoinSafeEmpty (
311313 this . model . getCheckboxControlOptions ( ) . map ( checkboxControlModel =>
312314 checkboxControlModel . getOptions ( ) . pipe (
313- first ( ) ,
315+ take ( 1 ) ,
314316 map ( options => {
315317 options . forEach ( option => {
316- if ( option === changed . option ) {
318+ if ( this . isLabeledOptionMatch ( option , changed . option as LabeledTableControlOption ) ) {
317319 checkboxControlModel . checked = changed . option . value === true ;
318320 }
319321 } ) ;
@@ -329,6 +331,10 @@ export class TableWidgetRendererComponent
329331 ) ;
330332 }
331333
334+ private isLabeledOptionMatch ( option1 : LabeledTableControlOption , option2 : LabeledTableControlOption ) : boolean {
335+ return option1 . label === option2 . label && option1 . value === option2 . value ;
336+ }
337+
332338 public onSearchChange ( text : string ) : void {
333339 const searchFilter : TableFilter = {
334340 field : this . api . model . getSearchAttribute ( ) ! ,
@@ -385,13 +391,15 @@ export class TableWidgetRendererComponent
385391 }
386392
387393 private mergeFilters ( tableFilter : TableFilter ) : TableFilter [ ] {
388- const existingSelectFiltersWithChangedRemoved = this . selectFilterSubject
389- . getValue ( )
390- . filter ( existingFilter => existingFilter . field !== tableFilter . field ) ;
394+ const existingSelectFiltersWithChangedRemoved = this . removeFilters ( tableFilter . field ) ;
391395
392396 return [ ...existingSelectFiltersWithChangedRemoved , tableFilter ] . filter ( f => f . value !== undefined ) ; // Remove filters that are unset
393397 }
394398
399+ private removeFilters ( field : string ) : TableFilter [ ] {
400+ return this . selectFilterSubject . getValue ( ) . filter ( existingFilter => existingFilter . field !== field ) ;
401+ }
402+
395403 private mergeQueryProperties ( properties : Dictionary < unknown > ) : Dictionary < unknown > {
396404 return {
397405 ...this . queryPropertiesSubject . getValue ( ) ,
0 commit comments