@@ -12,6 +12,13 @@ import { getPreferences, updatePreferences, getAllPreferences } from './ClassPre
1212
1313const VERSION = 1 ;
1414
15+ /**
16+ * In-memory cache for filters fetched from server storage
17+ * Cache persists for the lifetime of the page (until browser reload)
18+ * Structure: { appId: { className: filters[] } }
19+ */
20+ const serverFiltersCache = { } ;
21+
1522/**
1623 * FilterPreferencesManager with server-side storage support
1724 * Manages DataBrowser filters for specific classes
@@ -32,9 +39,23 @@ export default class FilterPreferencesManager {
3239 // Check if server storage is enabled and user prefers it
3340 if ( this . serverStorage . isServerConfigEnabled ( ) && prefersServerStorage ( appId ) ) {
3441 try {
42+ // Check cache first
43+ if ( serverFiltersCache [ appId ] && serverFiltersCache [ appId ] [ className ] ) {
44+ return serverFiltersCache [ appId ] [ className ] ;
45+ }
46+
47+ // Fetch from server and cache the result
3548 const serverFilters = await this . _getFiltersFromServer ( appId , className ) ;
3649 // Always return server filters (even if empty) when server storage is preferred
37- return serverFilters || [ ] ;
50+ const filters = serverFilters || [ ] ;
51+
52+ // Cache the fetched filters
53+ if ( ! serverFiltersCache [ appId ] ) {
54+ serverFiltersCache [ appId ] = { } ;
55+ }
56+ serverFiltersCache [ appId ] [ className ] = filters ;
57+
58+ return filters ;
3859 } catch ( error ) {
3960 console . error ( 'Failed to get filters from server:' , error ) ;
4061 // When server storage is preferred, return empty array instead of falling back to local
@@ -61,7 +82,14 @@ export default class FilterPreferencesManager {
6182 // Check if server storage is enabled and user prefers it
6283 if ( this . serverStorage . isServerConfigEnabled ( ) && prefersServerStorage ( appId ) ) {
6384 try {
64- return await this . _saveFilterToServer ( appId , className , filterWithId ) ;
85+ await this . _saveFilterToServer ( appId , className , filterWithId ) ;
86+
87+ // Invalidate cache for this class - will be reloaded on next getFilters call
88+ if ( serverFiltersCache [ appId ] ) {
89+ delete serverFiltersCache [ appId ] [ className ] ;
90+ }
91+
92+ return ;
6593 } catch ( error ) {
6694 console . error ( 'Failed to save filter to server:' , error ) ;
6795 // On error, fallback to local storage
@@ -84,7 +112,14 @@ export default class FilterPreferencesManager {
84112 // Check if server storage is enabled and user prefers it
85113 if ( this . serverStorage . isServerConfigEnabled ( ) && prefersServerStorage ( appId ) ) {
86114 try {
87- return await this . _deleteFilterFromServer ( appId , filterId ) ;
115+ await this . _deleteFilterFromServer ( appId , filterId ) ;
116+
117+ // Invalidate cache for this class - will be reloaded on next getFilters call
118+ if ( serverFiltersCache [ appId ] ) {
119+ delete serverFiltersCache [ appId ] [ className ] ;
120+ }
121+
122+ return ;
88123 } catch ( error ) {
89124 console . error ( 'Failed to delete filter from server:' , error ) ;
90125 // On error, fallback to local storage
@@ -166,6 +201,9 @@ export default class FilterPreferencesManager {
166201 } ;
167202 }
168203
204+ // Invalidate cache after migration
205+ delete serverFiltersCache [ appId ] ;
206+
169207 return { success : true , filterCount : totalFilterCount } ;
170208 } catch ( error ) {
171209 console . error ( 'Failed to migrate filters to server:' , error ) ;
0 commit comments