| | |
| | | queue_stats: data.queue_stats || {} |
| | | }; |
| | | |
| | | for (let [key, value] of Object.entries(store.filters)) { |
| | | if (typeof value === 'string' && value.includes(',')) { |
| | | this.createSplitCacheEntries(name, items, key, store.filters, response); |
| | | } |
| | | } |
| | | |
| | | // Emit events for items with status changes |
| | | changes.forEach(changeInfo => { |
| | | if (changeInfo.statusChanged) { |
| | |
| | | }); |
| | | } |
| | | |
| | | createSplitCacheEntries(name, items, key, filters, response) { |
| | | const store = this.stores.get(name); |
| | | const keys = filters[key].split(',').map(v => v.trim()); |
| | | |
| | | keys.forEach(value => { |
| | | let temp = {}; |
| | | temp[key] = value; |
| | | const newFilters = { |
| | | ... filters, |
| | | [key]: value |
| | | }; |
| | | const cacheKey = this.generateCacheKey(newFilters); |
| | | if(store.cache.has(cacheKey)) return; |
| | | let filteredItems = this.filterByIndex(name,temp).map(item => this.getItemKey(item, store.config.keyPath)); |
| | | |
| | | const entry = { |
| | | key: cacheKey, |
| | | items: filteredItems, |
| | | timestamp: Date.now(), |
| | | endpoint: store.config.endpoint, |
| | | filters: newFilters, |
| | | etag: response.headers.get('Etag'), |
| | | lastModified: response.headers.get('Last-Modified'), |
| | | has_more: filteredItems.length === 20, |
| | | } |
| | | store.cache.set(cacheKey, entry); |
| | | if (store.db?.objectStoreNames.contains('cache')) { |
| | | this.withTransaction(name, 'cache', 'readwrite', (objectStore) =>{ |
| | | objectStore.put(entry); |
| | | }); |
| | | } |
| | | }) |
| | | } |
| | | /*********************************************************************** |
| | | * SAVE OPERATIONS |
| | | ***********************************************************************/ |
| | |
| | | |
| | | if (clearAll) { |
| | | store.filters = { ...store.config.filters }; |
| | | } else { |
| | | // Apply updates (null/undefined/'' = delete) |
| | | Object.entries(updates).forEach(([key, value]) => { |
| | | if (value === null || value === undefined || value === '') { |
| | | delete store.filters[key]; |
| | | } else { |
| | | store.filters[key] = value; |
| | | } |
| | | }); |
| | | } |
| | | |
| | | Object.entries(updates).forEach(([key, value]) => { |
| | | if (value === null || value === undefined || value === '') { |
| | | delete store.filters[key]; |
| | | } else { |
| | | store.filters[key] = value; |
| | | } |
| | | }); |
| | | |
| | | const shouldFetch = await this.shouldFetchWithFilters(name, updates, oldFilters); |
| | | |
| | | this.notify(name, 'filters-changed', { |
| | |
| | | |
| | | const hasChanges = Object.keys(filters).some( |
| | | key => store.filters[key] !== filters[key] |
| | | ) || Object.keys(store.filters).some( |
| | | key => !(key in filters) && filters !== store.config.filters |
| | | ); |
| | | |
| | | if (!hasChanges) return; |