@@ -111,10 +111,66 @@ export class SavedFiltersPanelComponent implements OnInit, OnDestroy {
111111 } ) ;
112112
113113 this . _tables . cast . subscribe ( ( arg ) => {
114- if ( arg === 'filters set saved' || arg === 'filters set updated' ) {
114+ if ( arg === 'filters set saved' ) {
115115 this . loadSavedFilters ( ) ;
116116 }
117117
118+ if ( arg === 'filters set updated' ) {
119+ // Get the current saved filter ID from URL
120+ const savedFilterIdFromUrl = this . route . snapshot . queryParams [ 'saved_filter' ] ;
121+
122+ if ( savedFilterIdFromUrl ) {
123+ // If we have a filter selected in URL, get latest data and update URL
124+ this . _tables . getSavedFilters ( this . connectionID , this . selectedTableName ) . subscribe ( {
125+ next : ( data ) => {
126+ if ( data ) {
127+ // Find the updated filter in the response
128+ const updatedFilter = data . find ( filter => filter . id === savedFilterIdFromUrl ) ;
129+ if ( updatedFilter ) {
130+ const processedFilter = this . processFiltersData ( updatedFilter ) ;
131+
132+ // Update local state
133+ this . selectedFilterSetId = savedFilterIdFromUrl ;
134+ this . filterSelected . emit ( processedFilter ) ;
135+
136+ // Update URL with the refreshed filter data
137+ const additionalParams : any = {
138+ filters : JsonURL . stringify ( updatedFilter . filters ) ,
139+ saved_filter : savedFilterIdFromUrl
140+ } ;
141+
142+ if ( updatedFilter . dynamic_column ) {
143+ additionalParams . dynamic_column = JsonURL . stringify ( {
144+ column_name : updatedFilter . dynamic_column . column_name ,
145+ comparator : updatedFilter . dynamic_column . comparator
146+ } ) ;
147+ }
148+
149+ const queryParams = this . buildQueryParams ( additionalParams ) ;
150+ this . router . navigate ( [ `/dashboard/${ this . connectionID } /${ this . selectedTableName } ` ] , { queryParams } ) ;
151+ }
152+
153+ // Update the full filters map
154+ this . savedFilterData = data . sort ( ( a , b ) =>
155+ new Date ( a . createdAt ) . getTime ( ) - new Date ( b . createdAt ) . getTime ( )
156+ ) ;
157+ this . savedFilterMap = Object . assign ( { } , ...data . map ( ( filter ) => {
158+ const transformedFilter = this . processFiltersData ( filter ) ;
159+ return { [ filter . id ] : transformedFilter } ;
160+ } ) ) ;
161+ }
162+ } ,
163+ error : ( error ) => {
164+ console . error ( 'Error fetching updated filters:' , error ) ;
165+ this . loadSavedFilters ( ) ;
166+ }
167+ } ) ;
168+ } else {
169+ // Just refresh filters if no filter selected in URL
170+ this . loadSavedFilters ( ) ;
171+ }
172+ }
173+
118174 if ( arg === 'delete saved filters' ) {
119175 this . loadSavedFilters ( ) ;
120176 this . selectedFilterSetId = null ;
@@ -180,7 +236,7 @@ export class SavedFiltersPanelComponent implements OnInit, OnDestroy {
180236 }
181237
182238 handleOpenSavedFiltersDialog ( filtersSet : any = null ) {
183- this . dialog . open ( SavedFiltersDialogComponent , {
239+ const dialogRef = this . dialog . open ( SavedFiltersDialogComponent , {
184240 width : '56em' ,
185241 data : {
186242 connectionID : this . connectionID ,
@@ -195,6 +251,9 @@ export class SavedFiltersPanelComponent implements OnInit, OnDestroy {
195251 }
196252 }
197253 } ) ;
254+
255+ // No need to handle URL updates here - it's now handled in the tables.cast subscription
256+ // when 'filters set updated' is received
198257 }
199258
200259 getFilterEntries ( filters : any ) : { column : string ; operator : string ; value : string } [ ] {
0 commit comments