MDL-68464 enrol_manual: Reload participants table after enroling
[moodle.git] / enrol / manual / amd / build / quickenrolment.min.js.map
1 {"version":3,"sources":["../src/quickenrolment.js"],"names":["Selectors","cohortSelector","triggerButtons","unwantedHiddenFields","buttonWrapper","getBodyForContext","contextId","Fragment","loadFragment","getDynamicTableForElement","element","wrapper","closest","DynamicTable","getTableFromId","dataset","tableUniqueid","registerEventListeners","document","addEventListener","e","target","preventDefault","showModal","dynamicTable","ModalFactory","create","type","types","SAVE_CANCEL","large","title","Str","get_string","body","then","modal","getRoot","on","ModalEvents","save","find","submit","submitFormAjax","hidden","destroy","show","setSaveButtonText","getBodyPromise","get","querySelector","catch","Notification","exception","form","querySelectorAll","forEach","hiddenField","remove","hide","jQuery","ajax","Config","wwwroot","serialize","processData","contentType","response","error","Error","refreshTableContent","count","notificationBody","Toast","add","addNotification","message","init","contextid","Prefetch","prefetchStrings","prefetchString"],"mappings":"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","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Quick enrolment AMD module.\n *\n * @module     enrol_manual/quickenrolment\n * @copyright  2016 Damyon Wiese <damyon@moodle.com>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport * as DynamicTable from 'core_table/dynamic';\nimport * as Str from 'core/str';\nimport * as Toast from 'core/toast';\nimport Config from 'core/config';\nimport Fragment from 'core/fragment';\nimport ModalEvents from 'core/modal_events';\nimport ModalFactory from 'core/modal_factory';\nimport Notification from 'core/notification';\nimport jQuery from 'jquery';\nimport Prefetch from 'core/prefetch';\n\nconst Selectors = {\n    cohortSelector: \"#id_cohortlist\",\n    triggerButtons: \".enrolusersbutton.enrol_manual_plugin [type='submit']\",\n    unwantedHiddenFields: \"input[value='_qf__force_multiselect_submission']\",\n    buttonWrapper: '[data-region=\"wrapper\"]',\n};\n\n/**\n * Get the content of the body for the specified context.\n *\n * @param {Number} contextId\n * @returns {Promise}\n */\nconst getBodyForContext = contextId => {\n    return Fragment.loadFragment('enrol_manual', 'enrol_users_form', contextId, {});\n};\n\n/**\n * Get the dynamic table for the button.\n *\n * @param {HTMLElement} element\n * @returns {HTMLElement}\n */\nconst getDynamicTableForElement = element => {\n    const wrapper = element.closest(Selectors.buttonWrapper);\n\n    return DynamicTable.getTableFromId(wrapper.dataset.tableUniqueid);\n};\n\n/**\n * Register the event listeners for this contextid.\n *\n * @param {Number} contextId\n */\nconst registerEventListeners = contextId => {\n    document.addEventListener('click', e => {\n        if (e.target.closest(Selectors.triggerButtons)) {\n            e.preventDefault();\n\n            showModal(getDynamicTableForElement(e.target), contextId);\n\n            return;\n        }\n    });\n};\n\n/**\n * Display the modal for this contextId.\n *\n * @param {HTMLElement} dynamicTable The table to beb refreshed when changes are made\n * @param {Number} contextId\n * @returns {Promise}\n */\nconst showModal = (dynamicTable, contextId) => {\n    return ModalFactory.create({\n        type: ModalFactory.types.SAVE_CANCEL,\n        large: true,\n        title: Str.get_string('enrolusers', 'enrol_manual'),\n        body: getBodyForContext(contextId),\n    })\n    .then(modal => {\n        modal.getRoot().on(ModalEvents.save, e => {\n            // Trigger a form submission, so that any mform elements can do final tricks before the form submission\n            // is processed.\n            // The actual submit even tis captured in the next handler.\n\n            e.preventDefault();\n            modal.getRoot().find('form').submit();\n        });\n\n        modal.getRoot().on('submit', 'form', e => {\n            e.preventDefault();\n\n            submitFormAjax(dynamicTable, modal);\n        });\n\n        modal.getRoot().on(ModalEvents.hidden, () => {\n            modal.destroy();\n        });\n\n        return modal;\n    })\n    .then(modal => {\n        modal.show();\n\n        return modal;\n    })\n    .then(modal => {\n        modal.setSaveButtonText(Str.get_string('enrolusers', 'enrol_manual'));\n\n        modal.getBodyPromise().then(body => {\n            if (body.get(0).querySelector(Selectors.cohortSelector)) {\n                modal.setSaveButtonText(Str.get_string('enroluserscohorts', 'enrol_manual'));\n            }\n\n            return body;\n        })\n        .catch();\n\n        return modal;\n    })\n    .catch(Notification.exception);\n};\n\n/**\n * Submit the form via ajax.\n *\n * @param {HTMLElement} dynamicTable\n * @param {Object} modal\n */\nconst submitFormAjax = (dynamicTable, modal) => {\n    // Note: We use a jQuery object here so that we can use its serialize functionality.\n    const form = modal.getRoot().find('form');\n\n    // Before send the data through AJAX, we need to parse and remove some unwanted hidden fields.\n    // This hidden fields are added automatically by mforms and when it reaches the AJAX we get an error.\n    form.get(0).querySelectorAll(Selectors.unwantedHiddenFields).forEach(hiddenField => hiddenField.remove());\n\n    modal.hide();\n    modal.destroy();\n\n    jQuery.ajax(\n        `${Config.wwwroot}/enrol/manual/ajax.php?${form.serialize()}`,\n        {\n            type: 'GET',\n            processData: false,\n            contentType: \"application/json\",\n        }\n    )\n    .then(response => {\n        if (response.error) {\n            throw new Error(response.error);\n        }\n\n        DynamicTable.refreshTableContent(dynamicTable);\n        return Str.get_string('totalenrolledusers', 'enrol', response.count);\n    })\n    .then(notificationBody => Toast.add(notificationBody))\n    .catch(error => {\n        Notification.addNotification({\n            message: error.message,\n            type: 'error',\n        });\n    });\n};\n\n/**\n * Set up quick enrolment for the manual enrolment plugin.\n *\n * @param {Number} contextid The context id to setup for\n */\nexport const init = ({contextid}) => {\n    registerEventListeners(contextid);\n\n    Prefetch.prefetchStrings('enrol_manual', [\n        'enrolusers',\n        'enroluserscohorts',\n    ]);\n\n    Prefetch.prefetchString('enrol', 'totalenrolledusers');\n};\n"],"file":"quickenrolment.min.js"}