From 47e77f9fac1155c536b2b87fec552c7fcce66fa6 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Mon, 01 Jun 2026 18:06:34 +0000
Subject: [PATCH] =Timeline block fixes. Next up: adding article schema classes

---
 assets/js/concise/DataStore.js |   53 ++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 36 insertions(+), 17 deletions(-)

diff --git a/assets/js/concise/DataStore.js b/assets/js/concise/DataStore.js
index 29dc9c7..284c913 100644
--- a/assets/js/concise/DataStore.js
+++ b/assets/js/concise/DataStore.js
@@ -51,7 +51,7 @@
 
 		if (!this.dbConfig.has(name)) {
 			this.dbConfig.set(name, {
-				dbName: `jvb_${name}`,
+				dbName: `${jvbBase.base}${name}`,
 				version: version,
 				stores: {},
 				_initialized: false
@@ -85,6 +85,8 @@
 					ignore: [],			//any filters to ignore when filtering store locally
 					required: null,
 
+					isAuth: false,
+
 					// Cache
 					TTL: 3600000, // 1 hour
 					useHttpCaching: true,
@@ -542,11 +544,27 @@
 			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();
+				// Throw a new error with a descriptive message
+				throw new Error(`HTTP error! status: ${response.status}, message: ${errorBody}`);
+			}
 
 			if (response.status === 304) {
 				// 304 means "Not Modified" - use cached data if available
@@ -581,7 +599,6 @@
 			if (!response.ok) {
 				throw new Error(`HTTP ${response.status}: ${response.statusText}`);
 			}
-
 			const data = await response.json();
 
 			await this.processFetchedData(name, data, cacheKey, response);
@@ -597,7 +614,8 @@
 			const isAbortError = error?.name === 'AbortError';
 
 			if (!isAbortError) {
-				console.error(`Fetch error for store "${name}":`, error);
+				console.error(`Fetch error for store "${name}":`, error.message);
+				console.dir(error);
 				this.notify(name, 'fetch-error', { error });
 				throw error;
 			}
@@ -903,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
@@ -1108,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;
 			}
@@ -1266,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