From 3b5ed20d18fa877b1ec06afbccc32a38e68b6bc8 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Thu, 08 Jan 2026 16:51:27 +0000
Subject: [PATCH] =Queue.js refactor

---
 assets/js/concise/DataStore.js |   62 +++++++++++++++++++++++++-----
 1 files changed, 51 insertions(+), 11 deletions(-)

diff --git a/assets/js/concise/DataStore.js b/assets/js/concise/DataStore.js
index fd5d3cb..439225d 100644
--- a/assets/js/concise/DataStore.js
+++ b/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
 	 ***********************************************************************/
@@ -765,8 +804,7 @@
 
 		// FormData - convert and continue
 		if (obj instanceof FormData) {
-			if (validate) return { valid: false, error: `FormData at ${path}` };
-			console.debug(`[DataStore] Converted FormData at ${path}`);
+			console.debug(`[DataStore] Converting FormData at ${path}`);
 			return { valid: true, data: this.formDataToObject(obj) };
 		}
 
@@ -969,16 +1007,16 @@
 
 		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', {
@@ -1083,6 +1121,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;

--
Gitblit v1.10.0