1- import { Component , OnDestroy , OnInit } from '@angular/core' ;
1+ import { Component , input , OnDestroy , OnInit , output } from '@angular/core' ;
22import { FormControl , FormGroup } from '@angular/forms' ;
3- import { distinctUntilChanged , map , Observable , Subscription } from 'rxjs' ;
3+ import { distinctUntilChanged , map , Observable , Subscription , tap } from 'rxjs' ;
44import { FilterBroadcast } from '../models/broadcast-type.model' ;
5+ import { WidgetInput } from '../models/widget-input.model' ;
56import { FILTER_DEFAULTS } from './constants/filter-default-map.constant' ;
67import { FilterKey } from './constants/filter-key.enum' ;
78import { ActiveFilterConfig } from './models/active-filter-config.model' ;
@@ -10,25 +11,16 @@ import { SavedFilter } from './models/saved-filter.model';
1011import { BroadcastFactoryService } from './services/broadcast-factory.service' ;
1112import { FormFilterStateService } from './state/form-filter-state.service' ;
1213
13- const SAVED_FILTERS : SavedFilter = {
14- [ FilterKey . Country ] : {
15- filterForm : {
16- [ FilterKey . Country ] : [ 'USA' , 'Canada' ] ,
17- key : FilterKey . Country ,
18- } ,
19- filterConfig : {
20- displayName : 'Country' ,
21- } ,
22- } ,
23- } ;
24-
2514@Component ( {
2615 standalone : false ,
2716 selector : 'app-form-filter' ,
2817 templateUrl : './form-filter.component.html' ,
2918 styleUrl : './form-filter.component.scss' ,
3019} )
3120export class FormFilterComponent implements OnInit , OnDestroy {
21+ widgetInput = input . required < WidgetInput > ( ) ;
22+ savedState = output < SavedFilter > ( ) ;
23+
3224 activeFilters$ : Observable < { key : FilterKey ; value : ActiveFilterConfig } [ ] > ;
3325 filterOptions$ : Observable < FilterOption [ ] > ;
3426
@@ -92,6 +84,19 @@ export class FormFilterComponent implements OnInit, OnDestroy {
9284 ) ;
9385 } ) ,
9486 ) ;
87+
88+ this . subs . add (
89+ this . stateService . activeFilters$
90+ . pipe (
91+ distinctUntilChanged ( ( prev , curr ) => {
92+ return JSON . stringify ( prev ) === JSON . stringify ( curr ) ;
93+ } ) ,
94+ tap ( ( activeFilters ) => {
95+ this . savedState . emit ( activeFilters ) ;
96+ } ) ,
97+ )
98+ . subscribe ( ) ,
99+ ) ;
95100 }
96101
97102 ngOnInit ( ) : void {
@@ -103,16 +108,18 @@ export class FormFilterComponent implements OnInit, OnDestroy {
103108 }
104109
105110 initialiseFilters ( ) {
111+ const savedFilters = this . widgetInput ( ) . state as SavedFilter ;
112+
106113 const inactiveFilterOptions : FilterOption [ ] = Object . entries (
107114 FILTER_DEFAULTS ,
108115 )
109- . filter ( ( [ key ] ) => ! SAVED_FILTERS [ key as FilterKey ] )
116+ . filter ( ( [ key ] ) => ! savedFilters [ key as FilterKey ] )
110117 . map ( ( [ key , { filterConfig } ] ) => ( {
111118 key : key as FilterKey ,
112119 displayName : filterConfig . displayName ,
113120 } ) ) ;
114121
115- const activeFilters : SavedFilter = Object . entries ( SAVED_FILTERS ) . reduce (
122+ const activeFilters : SavedFilter = Object . entries ( savedFilters ) . reduce (
116123 ( acc , [ key , value ] ) => {
117124 const defaultConfig = FILTER_DEFAULTS [ key as FilterKey ] ;
118125 if ( ! defaultConfig ) {
0 commit comments