Jake Vanderwerf
8 days ago 3b83905603d44b1a08f8b2b36a605808ce686ad6
assets/js/concise/SchemaManager.js
@@ -15,18 +15,13 @@
   init() {
      // Initialize FormController
      if (window.jvbForm && !window.formController) {
         this.formController = new window.jvbForm();
         window.formController = this.formController;
      } else if (window.formController) {
         this.formController = window.formController;
      }
      this.formController = window.formController
      // Initialize main Tabs (they're outside forms, so FormController won't handle them)
      if (window.jvbTabs) {
         const tabContainer = document.querySelector('.jvb-seo-admin');
         if (tabContainer) {
            this.tabsInstance = new window.jvbTabs(tabContainer);
            this.tabsInstance = window.jvbTabs.registerTab(tabContainer);
         }
      }
@@ -321,46 +316,23 @@
      form.dataset.currentType = newType;
      // Use PopulateForm to properly populate all fields including repeaters
      if (window.jvbPopulateForm) {
         const populator = new window.jvbPopulateForm();
         const preservedFields = [];
      if (window.jvbPopulate) {
         this.populate = window.jvbPopulate.populate;
         // Populate each field that exists in both schemas
         Object.keys(currentData).forEach(fieldName => {
            const fieldWrapper = form.querySelector(`[data-field="${fieldName}"]`);
            if (fieldWrapper) {
               const fieldType = this.getFieldType(fieldWrapper);
               const fieldValue = currentData[fieldName];
               // Use PopulateForm's methods for complex fields
               if (fieldType === 'repeater' && Array.isArray(fieldValue)) {
                  populator.populateRepeaterField(fieldWrapper, fieldName, fieldValue);
                  preservedFields.push(fieldName);
               } else if (fieldValue !== null && fieldValue !== undefined && fieldValue !== '') {
                  // Simple field - populate directly
                  const field = fieldWrapper.querySelector(`[name="${fieldName}"]`) ||
                     fieldWrapper.querySelector(`[name^="${fieldName}"]`);
                  if (field) {
                     this.populateSimpleField(field, fieldValue);
                     preservedFields.push(fieldName);
                  }
               }
               this.populate(fieldWrapper, fieldName, fieldValue);
            }
         });
         // Announce changes
         if (preservedFields.length > 0) {
            const message = `Schema type changed to ${newType}. Preserved ${preservedFields.length} field value(s).`;
            console.log(message);
            if (this.a11y && typeof this.a11y.announce === 'function') {
               this.a11y.announce(message);
            }
         } else {
            const message = `Schema type changed to ${newType}.`;
            if (this.a11y && typeof this.a11y.announce === 'function') {
               this.a11y.announce(message);
            }
         const message = `Schema type changed to ${newType}.`;
         if (this.a11y && typeof this.a11y.announce === 'function') {
            this.a11y.announce(message);
         }
      }
   }
@@ -416,25 +388,6 @@
   }
   /**
    * Populate a simple field with value
    */
   populateSimpleField(field, value) {
      if (field.type === 'checkbox') {
         field.checked = value === '1' || value === 'true' || value === true;
      } else if (field.tagName === 'SELECT') {
         setTimeout(() => {
            field.value = value;
         }, 10);
      } else {
         field.value = value;
      }
      // Visual feedback
      field.classList.add('value-preserved');
      setTimeout(() => field.classList.remove('value-preserved'), 2000);
   }
   /**
    * Add CSS for preserved field indication
    */
   addPreservedFieldStyles() {