From a9b3b28d001941921aa70d37fdc87c758a163a44 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Fri, 05 Jun 2026 16:47:03 +0000
Subject: [PATCH] =Some hefty changes to FeedBlock. Transitioning to loading first page in php to save on extra requests. Got a bit to do yet, but I have to work on Northeh for a bit here.

---
 assets/js/concise/FormController.js |   90 ++++++++++++++++++++++++++++-----------------
 1 files changed, 56 insertions(+), 34 deletions(-)

diff --git a/assets/js/concise/FormController.js b/assets/js/concise/FormController.js
index 19e4a81..3ba05b4 100644
--- a/assets/js/concise/FormController.js
+++ b/assets/js/concise/FormController.js
@@ -210,7 +210,10 @@
 					let field = key.replace('_tempUpload', '');
 
 					if (Object.hasOwn(form.ui.uploads, field)) {
-						uploads.push(value);
+						uploads = [
+							... uploads,
+							... value
+						];
 					}
 				}
 			}
@@ -368,7 +371,7 @@
 			// Dependencies still need checking
 			if (this.dependencies.has(field.dataset.field)) {
 				let dependency = this.dependencies.get(field.dataset.field);
-				dependency.items.forEach(item => {
+				dependency.forEach(item => {
 					this.checkFieldDependency(item, field.dataset.field);
 				});
 			}
@@ -384,7 +387,7 @@
 		//Dependencies
 		if (this.dependencies.has(field.dataset.field)) {
 			let dependency = this.dependencies.get(field.dataset.field);
-			dependency.items.forEach(item => {
+			dependency.forEach(item => {
 				this.checkFieldDependency(item, field.dataset.field);
 			});
 		}
@@ -483,7 +486,16 @@
 			});
 		}
 		let changes = this.changes.get(form.id);
-		changes.changes[name] = value;
+		//If it is temporary uploads, we need to store them all
+		if (name.includes('_tempUpload')) {
+			if (!Object.hasOwn(changes.changes, name)) {
+				changes.changes[name] = [];
+			}
+			changes.changes[name].push(value);
+		} else {
+			changes.changes[name] = value;
+		}
+
 		this.changes.set(form.id, changes);
 		if (form.options.cache) {
 			this.scheduleBackup();
@@ -550,6 +562,17 @@
 	 * @param {object} options
 	 */
 	registerForm(form, options) {
+		options = {
+			autoUpload: false,
+			imageMeta: true,
+			delay: 1500,
+			endpoint: Object.hasOwn(form.dataset, 'save') ? form.dataset.save: '',
+			showStatus: true,
+			showSummary: false,
+			cache: true,
+			ignore: [],
+			... options
+		};
 		//Bail if form already registered
 		if (Object.hasOwn(form.dataset, 'formId') && this.forms.has(form.dataset.formId)) return;
 
@@ -564,19 +587,15 @@
 			element: form,
 			id: formId,
 			status: '',
-			options: {
-				autoUpload: options.autoUpload??false,
-				imageMeta: options.imageMeta??true,
-				delay: options.delay??1500,
-				endpoint: options.save??form.dataset.save??'',
-				showStatus: options.showStatus??true,
-				showSummary: options.showSummary??false,
-				cache: options.cache??true,
-				ignore: options.ignore??[]
-			},
+			options: options,
 			ui: window.uiFromSelectors(this.selectors.forms, form)
 		};
 
+		config.ui.fields = {};
+		form.querySelectorAll('[data-field]').forEach((field) => {
+			config.ui.fields[field.dataset.field] = field;
+		});
+
 		this.initializeFields(form, config);
 		this.forms.set(formId, config);
 
@@ -603,10 +622,10 @@
 		}
 		// Clean up dependencies for this form
 		this.dependencies.forEach((dependency, fieldName) => {
-			dependency.items = dependency.items.filter(item => item.form !== formId);
+			dependency = dependency.filter(item => item.form !== formId);
 
 			// Remove the dependency entry entirely if no items left
-			if (dependency.items.length === 0) {
+			if (dependency.length === 0) {
 				this.dependencies.delete(fieldName);
 			}
 		});
@@ -1133,38 +1152,41 @@
 			const requiredValue = field.dataset.dependsValue;
 			const operator = field.dataset.dependsOperatior??'==';
 
+			let formData = this.forms.get(form.dataset.formId);
+
 			if (!this.dependencies.has(dependsOn)) {
-				let element = document.querySelector(`[field="${dependsOn}"]`);
-				if (element) {
-					this.dependencies.set(dependsOn, {
-						element: element,
-						items: []
-					});
+				if (Object.hasOwn(formData.ui.fields, dependsOn)) {
+					this.dependencies.set(dependsOn, []);
 				}
 			}
 			let dependency = this.dependencies.get(dependsOn);
-			dependency.items.push({
-				field: field,
-				form: form.dataset.formId,
-				requiredValue: requiredValue,
-				operator: operator
-			});
-			this.dependencies.set(dependsOn, dependency);
-			this.checkFieldDependency(dependency, dependsOn);
+			if (dependency) {
+				dependency.push({
+					field:	field,
+					form: form.dataset.formId,
+					requiredValue: requiredValue,
+					operator: operator
+				});
+				this.dependencies.set(dependsOn, dependency);
+			}
+
+			this.checkFieldDependency(field, dependsOn);
 		});
 	}
 	checkFieldDependency(dependentField, controlFieldName) {
+		const form = this.getForm(dependentField);
 		const controlField = this.dependencies.get(controlFieldName);
 		if (!controlField) return;
 
-		const controlValue = this.getFieldCheckedValue(controlField.element);
+
+		const controlValue = this.getFieldValue(form.ui.fields[controlFieldName]);
 		const shouldShow = this.evaluateCondition(
 			controlValue,
-			dependentField.requiredValue,
-			dependentField.operator
+			dependentField.dataset.dependsValue,
+			dependentField.dataset.dependsOperatior
 		);
 
-		this.toggleFieldVisibility(dependentField.field, shouldShow);
+		this.toggleFieldVisibility(dependentField, shouldShow);
 	}
 	evaluateCondition(value, requiredValue, operator) {
 		const fieldStr = String(value || '');

--
Gitblit v1.10.0