summaryrefslogtreecommitdiff
path: root/addons/mail/static/src/utils
diff options
context:
space:
mode:
authorSébastien Theys <seb@odoo.com>2020-06-26 09:32:32 +0000
committerSébastien Theys <seb@odoo.com>2020-06-26 11:21:35 +0000
commit1c058b72d83da3be1068961305577b0ad2ca1a2a (patch)
treec6bae7618cbe91424c4174fca2e9da39610f4124 /addons/mail/static/src/utils
parentdc011d12463df07ac75931a5ad332aac12c020a4 (diff)
[FIX] mail: fix (inbox reply) composer event handlers (and discard)
task-2092950 closes odoo/odoo#53731 X-original-commit: c29f5776594c4d2278ce163a78d8eb917fb672c0 Signed-off-by: Sébastien Theys (seb) <seb@odoo.com> Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
Diffstat (limited to 'addons/mail/static/src/utils')
-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,