summaryrefslogtreecommitdiff
path: root/addons/mail/static/src/utils/utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/mail/static/src/utils/utils.js')
-rw-r--r--addons/mail/static/src/utils/utils.js32
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,