Skip to content

Commit b9428a5

Browse files
saved filters: update url if editing currently applied filter
1 parent 4fa278e commit b9428a5

1 file changed

Lines changed: 61 additions & 2 deletions

File tree

frontend/src/app/components/dashboard/db-table-view/saved-filters-panel/saved-filters-panel.component.ts

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)