From 42a75863fe2c4b214f4aebf365442f9d0c83596b Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 1 Mar 2022 00:25:14 +1100 Subject: [PATCH] Adds a "persist" option for modal forms --- InvenTree/part/templates/part/category.html | 4 ++ InvenTree/templates/js/translated/forms.js | 47 +++++++++++++++++---- 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/InvenTree/part/templates/part/category.html b/InvenTree/part/templates/part/category.html index 4de0005672..e02c77509d 100644 --- a/InvenTree/part/templates/part/category.html +++ b/InvenTree/part/templates/part/category.html @@ -313,6 +313,10 @@ fields: fields, groups: partGroups(), title: '{% trans "Create Part" %}', + reloadFormAfterSuccess: true, + persist: true, + persistMessage: '{% trans "Create another part after this one" %}', + successMessage: '{% trans "Part created successfully" %}', onSuccess: function(data) { // Follow the new part location.href = `/part/${data.pk}/`; diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js index c288ada27f..2946b77e4e 100644 --- a/InvenTree/templates/js/translated/forms.js +++ b/InvenTree/templates/js/translated/forms.js @@ -542,6 +542,11 @@ function constructFormBody(fields, options) { insertConfirmButton(options); } + // Insert "persist" button (if required) + if (options.persist) { + insertPersistButton(options); + } + // Display the modal $(modal).modal('show'); @@ -616,6 +621,22 @@ function insertConfirmButton(options) { } +/* Add a checkbox to select if the modal will stay open after success */ +function insertPersistButton(options) { + + var message = options.persistMessage || '{% trans "Keep this form open" %}'; + + var html = ` +
+ + +
+ `; + + $(options.modal).find('#modal-footer-buttons').append(html); +} + + /* * Extract all specified form values as a single object */ @@ -938,13 +959,23 @@ function handleFormSuccess(response, options) { // Should we show alerts immediately or cache them? var cache = (options.follow && response.url) || options.redirect || options.reload; - if (options.reloadFormAfterSuccess) { + // Should the form "persist"? + var persist = false; + + if (options.persist && options.modal) { + // Determine if this form should "persist", or be dismissed? + var chk = $(options.modal).find('#modal-persist'); + + persist = chk.exists() && chk.prop('checked'); + } + + if (persist) { cache = false; } var msg_target = null; - if (options.modal && options.reloadFormAfterSuccess) { + if (persist) { // If the modal is persistant, the target for any messages should be the modal! msg_target = $(options.modal).find('#pre-form-content'); } @@ -971,13 +1002,8 @@ function handleFormSuccess(response, options) { if (response && response.danger) { showAlertOrCache(response.danger, cache, {style: 'danger'}); } - - if (options.onSuccess) { - // Callback function - options.onSuccess(response, options); - } - if (options.reloadFormAfterSuccess) { + if (persist) { // Instead of closing the form and going somewhere else, // reload (empty) the form so the user can input more data @@ -997,6 +1023,11 @@ function handleFormSuccess(response, options) { $(options.modal).modal('hide'); } + if (options.onSuccess) { + // Callback function + options.onSuccess(response, options); + } + if (options.follow && response.url) { // Follow the returned URL window.location.href = response.url;