From 42fa8304ddb811b0f725f245130f70c0f5e86a6c Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Tue, 04 Nov 2025 06:12:02 +0000
Subject: [PATCH] =Refactored LoginManager to be more extensible and configurable, as well as an AjaxRateLimiter

---
 assets/js/concise/View.js |   69 +++++++++++++++++++++++-----------
 1 files changed, 47 insertions(+), 22 deletions(-)

diff --git a/assets/js/concise/View.js b/assets/js/concise/View.js
index 70c8e2f..96bbdc8 100644
--- a/assets/js/concise/View.js
+++ b/assets/js/concise/View.js
@@ -8,8 +8,10 @@
 
 		this.container = container;
 		this.initElements();
+		this.settings = window.jvbUserSettings;
 
 		this.store = store;
+
 		this.items = {
 			list: new Map(),
 			grid: new Map(),
@@ -45,12 +47,11 @@
 		// Subscribe to store updates
 		this.store.subscribe((event, data) => {
 			switch(event) {
-				case 'data-loaded':
 				case 'items-saved':
-					this.handleDataUpdate(data);
+					// this.handleDataUpdate(data);
 					break;
-				case 'items-updated':
-					this.handleItemsUpdate(data.items);
+				case 'data-loaded':
+					this.handleItemsUpdate();
 					break;
 				case 'item-saved':
 					// this.updateItem(data.item);
@@ -140,6 +141,7 @@
 
 	setupViewSwitcher() {
 		document.querySelectorAll('[data-view]').forEach(btn => {
+			this.settings.addSetting(btn);
 			btn.addEventListener('click', () => {
 				this.currentView = btn.dataset.view;
 				this.render();
@@ -151,33 +153,32 @@
 	 * Handle data updates from store
 	 */
 	handleDataUpdate(data) {
-		if (data.data && data.data.items) {
-			this.render(data.data.items);
-		}
+		console.log(data);
+		const items = data.data?.items || data.items || [];
+		this.render(items);
 	}
 
 	/**
 	 * Handle items update
 	 */
-	handleItemsUpdate(items) {
-		this.render(items);
+	handleItemsUpdate() {
+		console.log(this.store.data);
+		this.render(this.store.data);
 	}
 
-	render(items = null) {
+	render(items = []) {
 		if (!this.store) {
 			console.error('No store connected to renderer');
 			return;
 		}
 
-		// Get items from store if not provided
-		if (!items) {
-			const currentRequest = this.store.getCurrentRequest();
-			if (currentRequest && currentRequest.data && currentRequest.data.items) {
-				items = currentRequest.data.items;
-			} else {
-				return;
-			}
+
+		// Handle empty state
+		if (items.length === 0) {
+			this.renderEmpty();
+			return;
 		}
+
 		switch(this.currentView) {
 			case 'grid':
 				this.renderGrid(items);
@@ -193,6 +194,17 @@
 		this.updateSelectionUI();
 	}
 
+	renderEmpty() {
+		this.toggleTable(false);
+		window.removeChildren(this.ui.grid);
+
+		const empty = window.getTemplate('emptyState');
+		if (empty) {
+			this.ui.grid.appendChild(empty);
+			this.a11y?.announce('No items found');
+		}
+	}
+
 	renderGrid(items) {
 		this.toggleGrid();
 		this.toggleTable(false);
@@ -246,8 +258,6 @@
 			checkbox.id,
 			checkbox.checked,
 			label.htmlFor,
-			img.src,
-			img.alt,
 			edit.dataset.id,
 			trash.dataset.id
 		] = [
@@ -255,11 +265,26 @@
 			`select-${item.id}`,
 			this.selectedItems.has(`${item.id}`),
 			`select-${item.id}`,
-			item.images[item.fields.post_thumbnail]?.medium??'',
-			item.images[item.fields.post_thumbnail]?.alt??'',
 			item.id,
 			item.id
 		];
+		if (this.store.config.storeName === 'progress') {
+			[
+				img.src,
+				img.alt,
+			] = [
+				item.images[item.fields['timeline'][0].post_thumbnail]?.medium??'',
+				item.images[item.fields['timeline'][0].post_thumbnail]?.alt??'',
+			];
+		} else {
+			[
+				img.src,
+				img.alt,
+			] = [
+				item.images[item.fields.post_thumbnail]?.medium??'',
+				item.images[item.fields.post_thumbnail]?.alt??'',
+			];
+		}
 		return card;
 	}
 

--
Gitblit v1.10.0