{"version":3,"file":"EventCatcher.js","names":["Mixin","a","deepMerge","ajax","Event","getCSRF","execute","superclass","constructor","element","options","arguments","length","store","eventMap","bindEvents","Object","keys","forEach","eventName","addEventListener","onAjaxCall","bind","eventData","config","type","params","url","data","assign","detail","requestBody","JSON","stringify","csrf","name","token","method","body","then","response","fireEvents","emit","catch","destroy","removeEventListener"],"sources":["mixins/EventCatcher.js"],"sourcesContent":["import { Mixin } from 'core/mixwith';\nimport { deepMerge } from 'toolbox/deepMerge';\nimport { ajax } from 'toolbox/ajax';\nimport { Event } from 'services/EventEmitter';\nimport { getCSRF } from 'toolbox/csrf';\n\n/**\n * A mixin that catch the events, make an Ajax POST request and emit the events from the response.\n */\nexport default Mixin(superclass => class extends superclass {\n /**\n * @constructor\n * @param {HTMLElement} element HTMLElement of the component\n * @param {Object} options That belongs to the component\n * @param {Object} store Store\n */\n constructor(element, options = {}, store) {\n super(element, deepMerge({\n eventMap: {},\n }, options), store);\n }\n\n /**\n * Should contain only event listeners and nothing else\n * All the event handlers should be into a separated function. No usage of anonyous function\n */\n bindEvents() {\n super.bindEvents();\n\n Object.keys(this.options.eventMap || {}).forEach((eventName) => {\n this.element.addEventListener(eventName, this.onAjaxCall.bind(this));\n });\n }\n\n /**\n * Ajax call\n * @param {Object} eventData - event data\n */\n onAjaxCall(eventData) {\n const config = this.options.eventMap[eventData.type];\n let params;\n let url;\n\n if (typeof config === 'string') {\n url = config;\n } else {\n ({ params, url } = config);\n }\n\n const data = Object.assign(\n {\n eventName: eventData.type,\n },\n eventData.detail,\n params,\n );\n const requestBody = {\n data: JSON.stringify(data),\n };\n const csrf = getCSRF();\n\n if (csrf) {\n requestBody[csrf.name] = csrf.token;\n }\n\n ajax(url, {\n method: 'POST',\n body: requestBody,\n })\n .then((response) => {\n (response.fireEvents || []).forEach((eventName) => {\n Event.emit(eventName);\n });\n })\n .catch(() => {});\n }\n\n /**\n * Destroy is called automatically after the component is being removed from the DOM\n * You must always destroy the listeners attached to an element to avoid any memory leaks\n */\n destroy() {\n Object.keys(this.options.eventMap || {}).forEach((eventName) => {\n this.element.removeEventListener(eventName, this.onAjaxCall.bind(this));\n });\n }\n});\n"],"mappings":"2LAASA,CAAK,CAAAC,CAAA,CAALD,KAAK,WAAAC,CAAA,EACLC,CAAS,CAAAD,CAAA,CAATC,SAAS,WAAAD,CAAA,EACTE,CAAI,CAAAF,CAAA,CAAJE,IAAI,WAAAF,CAAA,EACJG,CAAK,CAAAH,CAAA,CAALG,KAAK,WAAAH,CAAA,EACLI,CAAO,CAAAJ,CAAA,CAAPI,OAAO,GAAAC,OAAA,SAAAA,CAAA,EAAAL,CAAA,WAKDD,CAAK,CAACO,CAAU,EAAI,aAAc,CAAAA,CAAW,CAOxDC,WAAWA,CAACC,CAAO,CAAuB,IAArB,CAAAC,CAAO,GAAAC,SAAA,CAAAC,MAAA,EAAAD,SAAA,aAAAA,SAAA,IAAG,CAAC,CAAC,CAAEE,CAAK,GAAAF,SAAA,CAAAC,MAAA,CAAAD,SAAA,WACpC,KAAK,CAACF,CAAO,CAAEP,CAAS,CAAC,CACrBY,QAAQ,CAAE,CAAC,CACf,CAAC,CAAEJ,CAAO,CAAC,CAAEG,CAAK,CACtB,CAMAE,UAAUA,CAAA,CAAG,CACT,KAAK,CAACA,UAAU,CAAC,CAAC,CAElBC,MAAM,CAACC,IAAI,CAAC,IAAI,CAACP,OAAO,CAACI,QAAQ,EAAI,CAAC,CAAC,CAAC,CAACI,OAAO,CAAEC,CAAS,EAAK,CAC5D,IAAI,CAACV,OAAO,CAACW,gBAAgB,CAACD,CAAS,CAAE,IAAI,CAACE,UAAU,CAACC,IAAI,CAAC,IAAI,CAAC,CACvE,CAAC,CACL,CAMAD,UAAUA,CAACE,CAAS,CAAE,CAClB,KAAM,CAAAC,CAAM,CAAG,IAAI,CAACd,OAAO,CAACI,QAAQ,CAACS,CAAS,CAACE,IAAI,CAAC,CAAC,GACjD,CAAAC,CAAM,CACNC,CAAG,CAEe,QAAQ,EAA1B,MAAO,CAAAH,CAAmB,CAC1BG,CAAG,CAAGH,CAAM,EAEX,CAAEE,MAAM,CAANA,CAAM,CAAEC,GAAG,CAAHA,CAAI,CAAC,CAAGH,CAAM,OAGvB,CAAAI,CAAI,CAAGZ,MAAM,CAACa,MAAM,CACtB,CACIV,SAAS,CAAEI,CAAS,CAACE,IACzB,CAAC,CACDF,CAAS,CAACO,MAAM,CAChBJ,CACJ,CAAC,CACKK,CAAW,CAAG,CAChBH,IAAI,CAAEI,IAAI,CAACC,SAAS,CAACL,CAAI,CAC7B,CAAC,CACKM,CAAI,CAAG7B,CAAO,CAAC,CAAC,CAElB6B,CAAI,GACJH,CAAW,CAACG,CAAI,CAACC,IAAI,CAAC,CAAGD,CAAI,CAACE,KAAK,EAGvCjC,CAAI,CAACwB,CAAG,CAAE,CACNU,MAAM,CAAE,MAAM,CACdC,IAAI,CAAEP,CACV,CAAC,CAAC,CACGQ,IAAI,CAAEC,CAAQ,EAAK,CAChB,CAACA,CAAQ,CAACC,UAAU,EAAI,EAAE,EAAEvB,OAAO,CAAEC,CAAS,EAAK,CAC/Cf,CAAK,CAACsC,IAAI,CAACvB,CAAS,CACxB,CAAC,CACL,CAAC,CAAC,CACDwB,KAAK,CAAC,IAAM,CAAC,CAAC,CACvB,CAMAC,OAAOA,CAAA,CAAG,CACN5B,MAAM,CAACC,IAAI,CAAC,IAAI,CAACP,OAAO,CAACI,QAAQ,EAAI,CAAC,CAAC,CAAC,CAACI,OAAO,CAAEC,CAAS,EAAK,CAC5D,IAAI,CAACV,OAAO,CAACoC,mBAAmB,CAAC1B,CAAS,CAAE,IAAI,CAACE,UAAU,CAACC,IAAI,CAAC,IAAI,CAAC,CAC1E,CAAC,CACL,CACJ,CAAC,CAAC","ignoreList":[]}