diff options
Diffstat (limited to 'addons/mail/static/src/utils/utils.js')
| -rw-r--r-- | addons/mail/static/src/utils/utils.js | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/addons/mail/static/src/utils/utils.js b/addons/mail/static/src/utils/utils.js index da0855437f7..8112eeca980 100644 --- a/addons/mail/static/src/utils/utils.js +++ b/addons/mail/static/src/utils/utils.js @@ -12,6 +12,36 @@ const { //------------------------------------------------------------------------------ const classPatchMap = new WeakMap(); +const eventHandledWeakMap = new WeakMap(); + +/** + * Returns whether the given event has been handled with the given markName. + * + * @param {Event} ev + * @param {string} markName + * @returns {boolean} + */ +function isEventHandled(ev, markName) { + if (!eventHandledWeakMap.get(ev)) { + return false; + } + return eventHandledWeakMap.get(ev).includes(markName); +} + +/** + * Marks the given event as handled by the given markName. Useful to allow + * handlers in the propagation chain to make a decision based on what has + * already been done. + * + * @param {Event} ev + * @param {string} markName + */ +function markEventHandled(ev, markName) { + if (!eventHandledWeakMap.get(ev)) { + eventHandledWeakMap.set(ev, []); + } + eventHandledWeakMap.get(ev).push(markName); +} /** * Wait a task tick, so that anything in micro-task queue that can be processed @@ -117,6 +147,8 @@ function unpatchInstanceMethods(Class, patchName) { //------------------------------------------------------------------------------ return { + isEventHandled, + markEventHandled, nextTick, patchClassMethods, patchInstanceMethods, |
