MDL-67264 core_course: Activity chooser new feature
[moodle.git] / course / amd / build / activitychooser.min.js.map
1 {"version":3,"sources":["../src/activitychooser.js"],"names":["init","courseId","pendingPromise","Pending","registerListenerEvents","resolve","events","CustomEvents","activate","keyboardActivate","fetchModuleData","innerPromise","Promise","Repository","activityModules","define","document","forEach","event","addEventListener","e","target","closest","selectors","elements","sectionmodchooser","caller","sectionIdMapper","dataset","sectionid","builtModuleData","modalBuilder","sectionModal","ChooserDialogue","displayChooser","webServiceData","id","newData","JSON","parse","stringify","allmodules","module","urls","addoption","data","buildModal","templateDataBuilder","ModalFactory","create","type","types","DEFAULT","title","body","Templates","render","large","templateContext","classes"],"mappings":"qYAwBA,OACA,OACA,OACA,OACA,OACA,OAEA,O,grBAQO,GAAMA,CAAAA,CAAI,CAAG,SAAAC,CAAQ,CAAI,CAC5B,GAAMC,CAAAA,CAAc,CAAG,GAAIC,UAA3B,CAEAC,CAAsB,CAACH,CAAD,CAAtB,CAEAC,CAAc,CAACG,OAAf,EACH,CANM,C,YAcDD,CAAAA,CAAsB,CAAG,SAACH,CAAD,CAAc,IACnCK,CAAAA,CAAM,CAAG,CACX,OADW,CAEXC,UAAaD,MAAb,CAAoBE,QAFT,CAGXD,UAAaD,MAAb,CAAoBG,gBAHT,CAD0B,CAOnCC,CAAe,CAAI,UAAM,CAC3B,GAAIC,CAAAA,CAAY,CAAG,IAAnB,CAEA,MAAO,WAAM,CACT,GAAI,CAACA,CAAL,CAAmB,CACfA,CAAY,CAAG,GAAIC,CAAAA,OAAJ,CAAY,SAACP,CAAD,CAAa,CACpCA,CAAO,CAACQ,CAAU,CAACC,eAAX,CAA2Bb,CAA3B,CAAD,CACV,CAFc,CAGlB,CAED,MAAOU,CAAAA,CACV,CACJ,CAZuB,EAPiB,CAqBzCJ,UAAaQ,MAAb,CAAoBC,QAApB,CAA8BV,CAA9B,EAGAA,CAAM,CAACW,OAAP,CAAe,SAACC,CAAD,CAAW,CACtBF,QAAQ,CAACG,gBAAT,CAA0BD,CAA1B,4CAAiC,WAAME,CAAN,iGACzBA,CAAC,CAACC,MAAF,CAASC,OAAT,CAAiBC,UAAUC,QAAV,CAAmBC,iBAApC,CADyB,kBAEnBC,CAFmB,CAEVN,CAAC,CAACC,MAAF,CAASC,OAAT,CAAiBC,UAAUC,QAAV,CAAmBC,iBAApC,CAFU,MAGDE,CAHC,gBAGqBjB,CAAAA,CAAe,EAHpC,yBAGwCgB,CAAM,CAACE,OAAP,CAAeC,SAHvD,CAGnBC,CAHmB,qCAIEC,CAAAA,CAAY,CAACD,CAAD,CAJd,SAInBE,CAJmB,QAMzBC,CAAe,CAACC,cAAhB,CAA+BR,CAA/B,CAAuCM,CAAvC,CAAqDF,CAArD,EANyB,yCAAjC,wDASH,CAVD,CAWH,C,CAWKH,CAAe,CAAG,SAACQ,CAAD,CAAiBC,CAAjB,CAAwB,CAE5C,GAAMC,CAAAA,CAAO,CAAGC,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAeL,CAAf,CAAX,CAAhB,CACAE,CAAO,CAACI,UAAR,CAAmBxB,OAAnB,CAA2B,SAACyB,CAAD,CAAY,CACnCA,CAAM,CAACC,IAAP,CAAYC,SAAZ,EAAyB,YAAcR,CAC1C,CAFD,EAGA,MAAOC,CAAAA,CAAO,CAACI,UAClB,C,CASKV,CAAY,CAAG,SAAAc,CAAI,QAAIC,CAAAA,CAAU,CAACC,CAAmB,CAACF,CAAD,CAApB,CAAd,C,CASnBE,CAAmB,CAAG,SAACF,CAAD,CAAU,CAClC,MAAO,CACH,QAAWA,CADR,CAGV,C,CASKC,CAAU,CAAG,SAAAD,CAAI,CAAI,CACvB,MAAOG,CAAAA,CAAY,CAACC,MAAb,CAAoB,CACvBC,IAAI,CAAEF,CAAY,CAACG,KAAb,CAAmBC,OADF,CAEvBC,KAAK,CAAE,iBAAU,uBAAV,CAFgB,CAGvBC,IAAI,CAAEC,CAAS,CAACC,MAAV,CAAiB,qBAAjB,CAAwCX,CAAxC,CAHiB,CAIvBY,KAAK,GAJkB,CAKvBC,eAAe,CAAE,CACbC,OAAO,CAAE,YADI,CALM,CAApB,CASV,C","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 * A type of dialogue used as for choosing modules in a course.\n *\n * @module     core_course/activitychooser\n * @package    core_course\n * @copyright  2020 Mathew May <mathew.solutions>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport * as ChooserDialogue from 'core_course/local/activitychooser/dialogue';\nimport * as Repository from 'core_course/local/activitychooser/repository';\nimport selectors from 'core_course/local/activitychooser/selectors';\nimport CustomEvents from 'core/custom_interaction_events';\nimport * as Templates from 'core/templates';\nimport * as ModalFactory from 'core/modal_factory';\nimport {get_string as getString} from 'core/str';\nimport Pending from 'core/pending';\n\n/**\n * Set up the activity chooser.\n *\n * @method init\n * @param {Number} courseId Course ID to use later on in fetchModules()\n */\nexport const init = courseId => {\n    const pendingPromise = new Pending();\n\n    registerListenerEvents(courseId);\n\n    pendingPromise.resolve();\n};\n\n/**\n * Once a selection has been made make the modal & module information and pass it along\n *\n * @method registerListenerEvents\n * @param {Number} courseId\n */\nconst registerListenerEvents = (courseId) => {\n    const events = [\n        'click',\n        CustomEvents.events.activate,\n        CustomEvents.events.keyboardActivate\n    ];\n\n    const fetchModuleData = (() => {\n        let innerPromise = null;\n\n        return () => {\n            if (!innerPromise) {\n                innerPromise = new Promise((resolve) => {\n                    resolve(Repository.activityModules(courseId));\n                });\n            }\n\n            return innerPromise;\n        };\n    })();\n\n    CustomEvents.define(document, events);\n\n    // Display module chooser event listeners.\n    events.forEach((event) => {\n        document.addEventListener(event, async(e) => {\n            if (e.target.closest(selectors.elements.sectionmodchooser)) {\n                const caller = e.target.closest(selectors.elements.sectionmodchooser);\n                const builtModuleData = sectionIdMapper(await fetchModuleData(), caller.dataset.sectionid);\n                const sectionModal = await modalBuilder(builtModuleData);\n\n                ChooserDialogue.displayChooser(caller, sectionModal, builtModuleData);\n            }\n        });\n    });\n};\n\n/**\n * Given the web service data and an ID we want to make a deep copy\n * of the WS data then add on the section ID to the addoption URL\n *\n * @method sectionIdMapper\n * @param {Object} webServiceData Our original data from the Web service call\n * @param {Array} id The ID of the section we need to append to the links\n * @return {Array} [modules] with URL's built\n */\nconst sectionIdMapper = (webServiceData, id) => {\n    // We need to take a fresh deep copy of the original data as an object is a reference type.\n    const newData = JSON.parse(JSON.stringify(webServiceData));\n    newData.allmodules.forEach((module) => {\n        module.urls.addoption += '&section=' + id;\n    });\n    return newData.allmodules;\n};\n\n/**\n * Build a modal for each section ID and store it into a map for quick access\n *\n * @method modalBuilder\n * @param {Map} data our map of section ID's & modules to generate modals for\n * @return {Object} TODO\n */\nconst modalBuilder = data => buildModal(templateDataBuilder(data));\n\n/**\n * Given an array of modules we want to figure out where & how to place them into our template object\n *\n * @method templateDataBuilder\n * @param {Array} data our modules to manipulate into a Templatable object\n * @return {Object} Our built object ready to render out\n */\nconst templateDataBuilder = (data) => {\n    return {\n        'default': data,\n    };\n};\n\n/**\n * Given an object we want to prebuild a modal ready to store into a map\n *\n * @method buildModal\n * @param {Object} data The template data which contains arrays of modules\n * @return {Object} The modal for the calling section with everything already set up\n */\nconst buildModal = data => {\n    return ModalFactory.create({\n        type: ModalFactory.types.DEFAULT,\n        title: getString('addresourceoractivity'),\n        body: Templates.render('core_course/chooser', data),\n        large: true,\n        templateContext: {\n            classes: 'modchooser'\n        }\n    });\n};\n"],"file":"activitychooser.min.js"}