From 97e7c319d656a5f05489ca996e249e7359303d4d Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 31 May 2026 22:42:33 +0000
Subject: [PATCH] =Jakevan edits done?

---
 build/forms/view.js |  117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 116 insertions(+), 1 deletions(-)

diff --git a/build/forms/view.js b/build/forms/view.js
index 6d7c3b2..f9dfe92 100644
--- a/build/forms/view.js
+++ b/build/forms/view.js
@@ -1 +1,116 @@
-(()=>{class o{constructor(){this.controller=new window.jvbForm,document.querySelectorAll(".jvb-form-block form").forEach((o=>{this.controller.registerForm(o,{autosave:!0,autoUpload:!1})})),this.controller.subscribe(((o,r)=>{"form-submit"===o&&this.handleFormSubmission(r)}))}async handleFormSubmission(o){const{formId:r,config:e,fullData:t}=o,n=e.element,s=new FormData;for(const[o,r]of Object.entries(t))"_wpnonce"!==o&&"_wp_http_referer"!==o&&(Array.isArray(r)?r.forEach((r=>s.append(`${o}[]`,r))):"object"==typeof r&&null!==r?s.append(o,JSON.stringify(r)):s.append(o,r));if(window.jvbUploads)try{(await window.jvbUploads.getFilesForForm(n)).forEach((({file:o,fieldName:r})=>{s.append(`${r}[]`,o)}))}catch(o){console.error("Error getting files:",o)}this.controller.showFormStatus(r,"uploading");try{const o=await fetch(`${jvbSettings.api}forms`,{method:"POST",credentials:"same-origin",body:s}),e=await o.json();if(!o.ok)return this.controller.showFormStatus(r,"error"),void this.controller.handleFormError(n,e);if(this.controller.showFormStatus(r,"submitted"),this.controller.showSummary(r,".jvb-form-block"),window.jvbUploads){const o=n.querySelectorAll("[data-upload-field]");for(const r of o){const o=window.jvbUploads.determineFieldId(r);await window.jvbUploads.clearFieldFromStores(o)}}}catch(o){console.error("Form submission error:",o),this.controller.showFormStatus(r,"error"),this.controller.handleFormError(n,{message:"Network error. Please check your connection and try again.",code:"network_error"})}finally{await this.controller.store.delete(r)}}}document.addEventListener("DOMContentLoaded",(async function(){window.auth.subscribe((r=>{"auth-loaded"===r&&new o}))}))})();
\ No newline at end of file
+/******/ (() => { // webpackBootstrap
+/*!***************************!*\
+  !*** ./src/forms/view.js ***!
+  \***************************/
+/**
+ * view.js
+ * Frontend JavaScript for the Form Block
+ * Handles form validation and submission
+ */
+/**
+ * view.js
+ * Frontend JavaScript for the Form Block
+ */
+class FormBlock {
+  constructor() {
+    this.controller = window.jvbForm;
+    document.querySelectorAll('.jvb-form-block form').forEach(form => {
+      this.controller.registerForm(form, {
+        cache: true,
+        autoUpload: false,
+        imageMeta: false
+      });
+    });
+    this.controller.subscribe((event, data) => {
+      if (event === 'form-submit') {
+        this.handleFormSubmission(data).then(() => {});
+      }
+    });
+  }
+  async handleFormSubmission(eventData) {
+    const {
+      config,
+      data
+    } = eventData;
+    const form = config.element;
+    const submitData = new FormData();
+
+    // Add regular form fields
+    for (const [key, value] of Object.entries(data)) {
+      if (Array.isArray(value)) {
+        value.forEach(v => submitData.append(`${key}[]`, v));
+      } else if (typeof value === 'object' && value !== null) {
+        submitData.append(key, JSON.stringify(value));
+      } else {
+        submitData.append(key, value);
+      }
+    }
+    config.element.querySelectorAll('[name="form_id"],[name="form_type"],[name="timestamp"],[name="cf-turnstile-response"]').forEach(input => {
+      submitData.append(input.name, input.value);
+    });
+
+    // Add uploaded files
+    if (window.jvbUploads) {
+      try {
+        const files = await window.jvbUploads.getFilesForForm(form);
+        files.forEach(({
+          file,
+          fieldName
+        }) => {
+          submitData.append(`${fieldName}[]`, file);
+        });
+      } catch (error) {
+        console.error('Error getting files:', error);
+      }
+    }
+    this.controller.showFormStatus(config.id, 'uploading');
+    try {
+      const response = await fetch(`${jvbSettings.api}forms`, {
+        method: 'POST',
+        credentials: 'same-origin',
+        body: submitData
+      });
+      const result = await response.json();
+      if (!response.ok) {
+        this.controller.showFormStatus(config.id, 'error');
+        this.controller.handleFormError(form, result);
+        return;
+      }
+      this.controller.showFormStatus(config.id, 'submitted');
+      // this.controller.handleFormSuccess(form, result);
+      this.controller.showSummary({
+        changes: data,
+        config: config
+      });
+      window.jvbA11y.announce('Form successfully submitted!');
+
+      // Clean up uploaded files
+      if (window.jvbUploads) {
+        const uploadFields = form.querySelectorAll('[data-upload-field]');
+        for (const field of uploadFields) {
+          const fieldId = window.jvbUploads.determineFieldId(field);
+          await window.jvbUploads.clearFieldFromStores(fieldId);
+        }
+      }
+    } catch (error) {
+      console.error('Form submission error:', error);
+      this.controller.showFormStatus(config.id, 'error');
+      this.controller.handleFormError(form, {
+        message: 'Network error. Please check your connection and try again.',
+        code: 'network_error'
+      });
+    } finally {
+      await this.controller.store.delete(config.id);
+    }
+  }
+}
+document.addEventListener('DOMContentLoaded', async function () {
+  window.auth.subscribe(event => {
+    if (event === 'auth-loaded') {
+      new FormBlock();
+    }
+  });
+});
+/******/ })()
+;
+//# sourceMappingURL=view.js.map
\ No newline at end of file

--
Gitblit v1.10.0