From 21f2dd5896e5685f8213cfcb1173ffc696e57425 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Wed, 19 Jan 2022 18:55:27 +1100 Subject: [PATCH] Use modal "depth" to construct form fields - Top level modals are not changed --- InvenTree/templates/js/translated/forms.js | 52 ++++++++++++++++------ 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js index 43e8d5ce62..e9e03f04fc 100644 --- a/InvenTree/templates/js/translated/forms.js +++ b/InvenTree/templates/js/translated/forms.js @@ -835,7 +835,9 @@ function updateFieldValue(name, value, field, options) { // Find the named field element in the modal DOM 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) { 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 */ -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 $(options.modal).find(`#div_id_${field_name}`).addClass('form-field-error'); @@ -1226,7 +1230,9 @@ function addClearCallbacks(fields, 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) { console.log(`WARNING: addClearCallback could not find field '${name}'`); @@ -1376,6 +1382,8 @@ function addSecondaryModal(field, fields, options) { var name = field.name; + var depth = options.depth || 0; + var secondary = field.secondary; var html = ` @@ -1419,6 +1427,8 @@ function addSecondaryModal(field, fields, options) { // Method should be "POST" for creation secondary.method = secondary.method || 'POST'; + secondary.depth = depth + 1; + constructForm( url, 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. * @@ -1783,7 +1807,7 @@ function constructField(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 if (parameters.hidden) { @@ -1803,6 +1827,8 @@ function constructField(name, parameters, options) { var group = parameters.group; + var group_id = getFieldName(group, options); + var group_options = options.groups[group] || {}; // Are we starting a new group? @@ -1810,12 +1836,12 @@ function constructField(name, parameters, options) { if (parameters.group != options.current_group) { html += ` -
-