From 3baf3d2545ba6ece6b74a64c0def59bd0774cf54 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Wed, 10 Jun 2026 16:34:12 +0000
Subject: [PATCH] =Laid the groundwork for an improved DashboardManager.php setup. Have to put it aside so I can get the dang Northeh done though.

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

diff --git a/assets/js/concise/View.js b/assets/js/concise/View.js
index ca6c99e..3f71831 100644
--- a/assets/js/concise/View.js
+++ b/assets/js/concise/View.js
@@ -19,7 +19,7 @@
 			grid: new Map(),
 			table: new Map(),
 		}
-		this.currentView = 'grid';
+		this.currentView = this.container.dataset.view ?? 'grid';
 		this.selectedItems = new Set();
 		this.subscribers = new Set();
 
@@ -161,15 +161,6 @@
 	}
 
 	/**
-	 * Handle data updates from store
-	 */
-	handleDataUpdate(data) {
-		console.log(data);
-		const items = data.data?.items || data.items || [];
-		this.render(items);
-	}
-
-	/**
 	 * Handle items update
 	 */
 	handleItemsUpdate() {
@@ -185,6 +176,7 @@
 
 		// Handle empty state
 		if (items.length === 0) {
+			console.log('Nothing to show');
 			this.renderEmpty();
 			return;
 		}
@@ -293,7 +285,10 @@
 	}
 
 	toggleTable(on) {
-		this.ui.table.selectedColumns.hidden = !on;
+		if (this.ui.table.selectedColumns) {
+			this.ui.table.selectedColumns.hidden = !on;
+		}
+
 		if (on && !this.ui.table.table) {
 			let table = window.getTemplate('contentTable');
 			this.container.append(table);
@@ -317,7 +312,10 @@
 				window.removeChildren(this.ui.table.body);
 			}
 		}
-		this.ui.table.selectedColumns.hidden = !on;
+
+		if (this.ui.table.selectedColumns) {
+			this.ui.table.selectedColumns.hidden = !on;
+		}
 	}
 
 	toggleGrid() {
@@ -360,17 +358,32 @@
 			row.querySelector('.select-item').value,
 			row.querySelector('.select-item').checked,
 			row.querySelector('.select-item + label').htmlFor,
-			row.querySelector(`input[name="post_status"][value="${item.status}"]`).checked
 		] = [
 			item.id,
 			item.id,
 			this.selectedItems.has(`${item.id}`),
 			item.id,
-			item.status
 		];
+		let status = row.querySelector(`input[name="post_status"][value="${item.status}"]`);
+		if (status) {
+			status.checked = true;
+		}
 
-		// Let jvbPopulate do its thing - NO prefixing needed!
-		new window.jvbPopulate(row, item.fields, item.images);
+		if (Object.hasOwn(this.ui.table.table.dataset, 'edit')) {
+			new window.jvbPopulate(row, item);
+		} else {
+			for (let [key, value] of Object.entries(item)) {
+				let col = row.querySelector(`[data-field="${key}"]`);
+				if (col) {
+					let p = col.querySelector('p');
+					if (col.dataset.fieldType === 'date') {
+						value = window.formatTimeAgo(value);
+					}
+					p.textContent = value;
+				}
+			}
+		}
+
 
 		// Clean up after population
 		this.cleanupTableRow(row);
@@ -402,24 +415,29 @@
 		let timelinePoint = row.querySelector('.timeline-point');
 		let tbody = row;
 
-		// Populate shared fields - NO prefixing!
+		// Populate shared fields
 		let sharedRow = row.querySelector('tr.shared');
-		new window.jvbPopulate(sharedRow, item.fields, item.images);
+		new window.jvbPopulate(sharedRow, item);
 		this.prefixTimelineFieldNames(sharedRow, item.id);
 		this.cleanupTableRow(sharedRow);
 
-		// Handle timeline points - NO prefixing!
+		// Handle timeline points
 		if (item.fields.timeline && typeof item.fields.timeline === 'object') {
 			const timelineArray = Object.entries(item.fields.timeline);
 
 			timelineArray.forEach(([imgId, timeline], index) => {
-
 				let point = timelinePoint.cloneNode(true);
 				point.dataset.index = index;
 				point.dataset.imageId = imgId;
 
+				// NEW: Create item-like structure for timeline point
+				const timelineItem = {
+					fields: timeline,
+					images: item.images,
+					taxonomies: {} // Timeline points don't have taxonomies
+				};
 
-				new window.jvbPopulate(point, timeline, item.images);
+				new window.jvbPopulate(point, timelineItem);
 
 				this.cleanupTableRow(point);
 				let imgdata = item.images[timeline.post_thumbnail];
@@ -427,7 +445,7 @@
 					point.querySelector('.field.upload').title = imgdata['image-title'];
 				}
 
-				this.prefixTimelineFieldNames(point,timeline.id);
+				this.prefixTimelineFieldNames(point, timeline.id);
 
 				tbody.insertBefore(point, timelinePoint);
 			});

--
Gitblit v1.10.0