mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-30 20:55:42 +00:00 
			
		
		
		
	Use modal "depth" to construct form fields
- Top level modals are not changed
This commit is contained in:
		| @@ -835,7 +835,9 @@ function updateFieldValue(name, value, field, options) { | |||||||
| // Find the named field element in the modal DOM | // Find the named field element in the modal DOM | ||||||
| function getFormFieldElement(name, options) { | function getFormFieldElement(name, options) { | ||||||
|  |  | ||||||
|     var el = $(options.modal).find(`#id_${name}`); |     var field_name = getFieldName(name, options); | ||||||
|  |  | ||||||
|  |     var el = $(options.modal).find(`#id_${field_name}`); | ||||||
|  |  | ||||||
|     if (!el.exists) { |     if (!el.exists) { | ||||||
|         console.log(`ERROR: Could not find form element for field '${name}'`); |         console.log(`ERROR: Could not find form element for field '${name}'`); | ||||||
| @@ -1148,7 +1150,9 @@ function handleFormErrors(errors, fields, options) { | |||||||
| /* | /* | ||||||
|  * Add a rendered error message to the provided field |  * Add a rendered error message to the provided field | ||||||
|  */ |  */ | ||||||
| function addFieldErrorMessage(field_name, error_text, error_idx, options) { | function addFieldErrorMessage(name, error_text, error_idx, options) { | ||||||
|  |  | ||||||
|  |     field_name = getFieldName(name, options); | ||||||
|  |  | ||||||
|     // Add the 'form-field-error' class |     // Add the 'form-field-error' class | ||||||
|     $(options.modal).find(`#div_id_${field_name}`).addClass('form-field-error'); |     $(options.modal).find(`#div_id_${field_name}`).addClass('form-field-error'); | ||||||
| @@ -1226,7 +1230,9 @@ function addClearCallbacks(fields, options) { | |||||||
|  |  | ||||||
| function addClearCallback(name, field, options) { | function addClearCallback(name, field, options) { | ||||||
|  |  | ||||||
|     var el = $(options.modal).find(`#clear_${name}`); |     var field_name = getFieldName(name, options); | ||||||
|  |  | ||||||
|  |     var el = $(options.modal).find(`#clear_${field_name}`); | ||||||
|      |      | ||||||
|     if (!el) { |     if (!el) { | ||||||
|         console.log(`WARNING: addClearCallback could not find field '${name}'`); |         console.log(`WARNING: addClearCallback could not find field '${name}'`); | ||||||
| @@ -1376,6 +1382,8 @@ function addSecondaryModal(field, fields, options) { | |||||||
|  |  | ||||||
|     var name = field.name; |     var name = field.name; | ||||||
|  |  | ||||||
|  |     var depth = options.depth || 0; | ||||||
|  |  | ||||||
|     var secondary = field.secondary; |     var secondary = field.secondary; | ||||||
|  |  | ||||||
|     var html = ` |     var html = ` | ||||||
| @@ -1419,6 +1427,8 @@ function addSecondaryModal(field, fields, options) { | |||||||
|         // Method should be "POST" for creation |         // Method should be "POST" for creation | ||||||
|         secondary.method = secondary.method || 'POST'; |         secondary.method = secondary.method || 'POST'; | ||||||
|  |  | ||||||
|  |         secondary.depth = depth + 1; | ||||||
|  |  | ||||||
|         constructForm( |         constructForm( | ||||||
|             url, |             url, | ||||||
|             secondary |             secondary | ||||||
| @@ -1757,6 +1767,20 @@ function renderModelData(name, model, data, parameters, options) { | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Construct a field name for the given field | ||||||
|  |  */ | ||||||
|  | function getFieldName(name, options) { | ||||||
|  |     var field_name = name; | ||||||
|  |  | ||||||
|  |     if (options.depth) { | ||||||
|  |         field_name += `_${options.depth}`; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return field_name; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Construct a single form 'field' for rendering in a form. |  * Construct a single form 'field' for rendering in a form. | ||||||
|  *  |  *  | ||||||
| @@ -1783,7 +1807,7 @@ function constructField(name, parameters, options) { | |||||||
|         return constructCandyInput(name, parameters, options); |         return constructCandyInput(name, parameters, options); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     var field_name = `id_${name}`; |     var field_name = getFieldName(name, options); | ||||||
|  |  | ||||||
|     // Hidden inputs are rendered without label / help text / etc |     // Hidden inputs are rendered without label / help text / etc | ||||||
|     if (parameters.hidden) { |     if (parameters.hidden) { | ||||||
| @@ -1803,6 +1827,8 @@ function constructField(name, parameters, options) { | |||||||
|  |  | ||||||
|         var group = parameters.group; |         var group = parameters.group; | ||||||
|  |  | ||||||
|  |         var group_id = getFieldName(group, options); | ||||||
|  |  | ||||||
|         var group_options = options.groups[group] || {}; |         var group_options = options.groups[group] || {}; | ||||||
|  |  | ||||||
|         // Are we starting a new group? |         // Are we starting a new group? | ||||||
| @@ -1810,12 +1836,12 @@ function constructField(name, parameters, options) { | |||||||
|         if (parameters.group != options.current_group) { |         if (parameters.group != options.current_group) { | ||||||
|  |  | ||||||
|             html += ` |             html += ` | ||||||
|             <div class='panel form-panel' id='form-panel-${group}' group='${group}'> |             <div class='panel form-panel' id='form-panel-${group_id}' group='${group}'> | ||||||
|                 <div class='panel-heading form-panel-heading' id='form-panel-heading-${group}'>`; |                 <div class='panel-heading form-panel-heading' id='form-panel-heading-${group_id}'>`; | ||||||
|             if (group_options.collapsible) { |             if (group_options.collapsible) { | ||||||
|                 html += ` |                 html += ` | ||||||
|                 <div data-bs-toggle='collapse' data-bs-target='#form-panel-content-${group}'> |                 <div data-bs-toggle='collapse' data-bs-target='#form-panel-content-${group_id}'> | ||||||
|                     <a href='#'><span id='group-icon-${group}' class='fas fa-angle-up'></span>  |                     <a href='#'><span id='group-icon-${group_id}' class='fas fa-angle-up'></span>  | ||||||
|                 `; |                 `; | ||||||
|             } else { |             } else { | ||||||
|                 html += `<div>`; |                 html += `<div>`; | ||||||
| @@ -1829,7 +1855,7 @@ function constructField(name, parameters, options) { | |||||||
|  |  | ||||||
|             html += ` |             html += ` | ||||||
|                 </div></div> |                 </div></div> | ||||||
|                 <div class='panel-content form-panel-content' id='form-panel-content-${group}'> |                 <div class='panel-content form-panel-content' id='form-panel-content-${group_id}'> | ||||||
|             `; |             `; | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -1848,7 +1874,7 @@ function constructField(name, parameters, options) { | |||||||
|         html += parameters.before; |         html += parameters.before; | ||||||
|     } |     } | ||||||
|      |      | ||||||
|     html += `<div id='div_${field_name}' class='${form_classes}'>`; |     html += `<div id='div_id_${field_name}' class='${form_classes}'>`; | ||||||
|  |  | ||||||
|     // Add a label |     // Add a label | ||||||
|     if (!options.hideLabels) { |     if (!options.hideLabels) { | ||||||
| @@ -1886,13 +1912,13 @@ function constructField(name, parameters, options) { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     html += constructInput(name, parameters, options); |     html += constructInput(field_name, parameters, options); | ||||||
|  |  | ||||||
|     if (extra) { |     if (extra) { | ||||||
|  |  | ||||||
|         if (!parameters.required) { |         if (!parameters.required) { | ||||||
|             html += ` |             html += ` | ||||||
|             <span class='input-group-text form-clear' id='clear_${name}' title='{% trans "Clear input" %}'> |             <span class='input-group-text form-clear' id='clear_${field_name}' title='{% trans "Clear input" %}'> | ||||||
|                 <span class='icon-red fas fa-backspace'></span> |                 <span class='icon-red fas fa-backspace'></span> | ||||||
|             </span>`; |             </span>`; | ||||||
|         } |         } | ||||||
| @@ -1909,7 +1935,7 @@ function constructField(name, parameters, options) { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Div for error messages |     // Div for error messages | ||||||
|     html += `<div id='errors-${name}'></div>`; |     html += `<div id='errors-${field_name}'></div>`; | ||||||
|  |  | ||||||
|  |  | ||||||
|     html += `</div>`; // controls |     html += `</div>`; // controls | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user