From 235ce5716edc2f7cbe80fdccf26eac7269587839 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Mon, 08 Jun 2026 04:38:18 +0000
Subject: [PATCH] =FavouritesManager.php and FavouritesRoutes.php fixes. Moving all logic to FavouritesManager.php. Still some left to do

---
 assets/js/concise/DataStore.js |   43 ++++++++++++++++++++++++++++---------------
 1 files changed, 28 insertions(+), 15 deletions(-)

diff --git a/assets/js/concise/DataStore.js b/assets/js/concise/DataStore.js
index b01b645..539c82b 100644
--- a/assets/js/concise/DataStore.js
+++ b/assets/js/concise/DataStore.js
@@ -48,7 +48,6 @@
 	register(name, configs = [], version = 1.25) {
 		if (!Array.isArray(configs)) configs = [configs];
 		if (configs.length === 0) return;
-
 		if (!this.dbConfig.has(name)) {
 			this.dbConfig.set(name, {
 				dbName: `${jvbBase.base}${name}`,
@@ -85,6 +84,8 @@
 					ignore: [],			//any filters to ignore when filtering store locally
 					required: null,
 
+					isAuth: false,
+
 					// Cache
 					TTL: 3600000, // 1 hour
 					useHttpCaching: true,
@@ -125,6 +126,7 @@
 			}
 		});
 
+
 		// Initialize database asynchronously
 		this.initDB(name).catch(error => {
 			console.error(`Failed to initialize store "${name}":`, error);
@@ -542,11 +544,21 @@
 			const controller = new AbortController();
 			store.currentRequest = controller;
 
-			const response = await fetch(url, {
-				method: 'GET',
-				headers,
-				signal: controller.signal
-			});
+			let response;
+			if (store.isAuth) {
+				response = await window.auth.fetch(url, {
+					method: 'GET',
+					headers,
+					signal: controller.signal
+				});
+			} else {
+				response = await fetch(url, {
+					method: 'GET',
+					headers,
+					signal: controller.signal
+				});
+			}
+
 			if (!response.ok) {
 				// Access the error details from the response body
 				const errorBody = await response.text();
@@ -909,6 +921,7 @@
 		if (type === 'object') {
 			const processed = {};
 			for (const [key, value] of Object.entries(obj)) {
+				if (value === undefined) continue;
 				const result = this.processForStorage(value, validate, `${path}.${key}`);
 				if (!result.valid) return result;
 				// Include null values, skip undefined
@@ -1114,7 +1127,12 @@
 
 		// Handle other filters
 		for (const [key, value] of Object.entries(store.filters)) {
-			if (key === 'taxonomy') continue;
+			if (key === 'taxonomy') {
+				if (typeof value === 'string' && !value.includes(',')) {
+					filterPredicates.push(item => item.taxonomy === value);
+				}
+				continue;
+			}
 			if (store.ignoreFilters.has(key)) {
 				continue;
 			}
@@ -1272,14 +1290,9 @@
 		}
 
 		if (store.lastResponse.has_more === false) {
-			// Check if new filters are a subset of what we have
-			const isSubsetFilter = Object.entries(updates).every(([key, value]) => {
-				if (store.ignoreFilters.has(key)) return true;
-				if (key === 'page') return true; // Handle pagination locally
-				return true; // We have all data, can filter locally
-			});
-
-			if (isSubsetFilter) return false;
+			if (this.hasCompleteData(store, store.filters)) {
+				return false;
+			}
 		}
 
 		if ('page' in updates) {

--
Gitblit v1.10.0