From 89b559a2a3c0de343fe1115d26537df68d8d45a8 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 28 Jan 2022 10:07:54 -0500 Subject: [PATCH] refactor: sorted-list .get() to be async fn + plugin hook `filter:settings.sorted-list.load` to allow modification of params prior to template parsing --- public/src/modules/settings/sorted-list.js | 57 ++++++++++++---------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/public/src/modules/settings/sorted-list.js b/public/src/modules/settings/sorted-list.js index 367999161e..dba5da9bc0 100644 --- a/public/src/modules/settings/sorted-list.js +++ b/public/src/modules/settings/sorted-list.js @@ -26,41 +26,44 @@ define('settings/sorted-list', [ values[key].push(formData); }); }, - get: function ($container, hash) { - const $list = $container.find('[data-type="list"]'); - const key = $container.attr('data-sorted-list'); - const formTpl = $container.attr('data-form-template'); + get: async ($container, hash) => { + const { listEl, key, formTpl, formValues } = await hooks.fire('filter:settings.sorted-list.load', { + listEl: $container.find('[data-type="list"]'), + key: $container.attr('data-sorted-list'), + formTpl: $container.attr('data-form-template'), + formValues: {}, + }); - benchpress.render(formTpl, {}).then(function (formHtml) { - const addBtn = $('[data-sorted-list="' + key + '"] [data-type="add"]'); + const formHtml = await benchpress.render(formTpl, formValues); - addBtn.on('click', function () { - const modal = bootbox.confirm(formHtml, function (save) { - if (save) { - SortedList.addItem(modal.find('form').children(), $container); - } - }); + const addBtn = $('[data-sorted-list="' + key + '"] [data-type="add"]'); + + addBtn.on('click', function () { + const modal = bootbox.confirm(formHtml, function (save) { + if (save) { + SortedList.addItem(modal.find('form').children(), $container); + } }); + }); - const call = $container.parents('form').attr('data-socket-get'); - const list = ajaxify.data[call ? hash : 'settings'][key]; + const call = $container.parents('form').attr('data-socket-get'); + const list = ajaxify.data[call ? hash : 'settings'][key]; - if (Array.isArray(list) && typeof list[0] !== 'string') { - list.forEach(function (item) { - const itemUUID = utils.generateUUID(); - const form = $(formHtml).deserialize(item); - form.attr('data-sorted-list-uuid', itemUUID); - form.attr('data-sorted-list-object', key); - $('#content').append(form.hide()); + if (Array.isArray(list) && typeof list[0] !== 'string') { + list.forEach(function (item) { + const itemUUID = utils.generateUUID(); + const form = $(formHtml).deserialize(item); + form.attr('data-sorted-list-uuid', itemUUID); + form.attr('data-sorted-list-object', key); + $('#content').append(form.hide()); - parse($container, itemUUID, item).then(() => { - hooks.fire('action:settings.sorted-list.loaded', { element: $list.get(0) }); - }); + parse($container, itemUUID, item).then(() => { + hooks.fire('action:settings.sorted-list.loaded', { element: listEl.get(0) }); }); - } - }); + }); + } - $list.sortable().addClass('pointer'); + listEl.sortable().addClass('pointer'); }, addItem: function ($formElements, $target) { const key = $target.attr('data-sorted-list');