Jake Vanderwerf
2026-01-07 bad59c66549eb601fed963ed013f9b79305ca003
assets/js/concise/DataStore.js
@@ -670,6 +670,12 @@
         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) {
@@ -682,6 +688,39 @@
      });
   }
   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
    ***********************************************************************/
@@ -969,8 +1008,8 @@
      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];
@@ -978,7 +1017,7 @@
               store.filters[key] = value;
            }
         });
      }
      const shouldFetch = await this.shouldFetchWithFilters(name, updates, oldFilters);
      this.notify(name, 'filters-changed', {
@@ -1083,6 +1122,8 @@
      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;