summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorAaron Bohy <aab@odoo.com>2020-04-20 12:16:16 +0000
committerAaron Bohy <aab@odoo.com>2020-04-22 07:50:00 +0000
commitae4c9d1eca5864f0cb9126d3539580fc4ae2cee9 (patch)
treee54927cbd812f6ef243acbc59d8ff072cda8f5ac /addons/web/static/src
parent7c0c947b0e8e60053629f1ad7e5b545060a0a517 (diff)
[FIX] web: toggle optional column in list with owl component
Have a list view with an Owl field component (e.g. widget="badge"), visible. Open the optional field dropdown and make another field visible. Before this commit, the '_onToggleOptionalColumn' handler was executed twice, because two click events where triggered: one on the label, and one on its associated input (because of the for attribute, see [1]). As a consequence, the new field was added, and directly removed from the view. This could even cause subsequent crashes. The difference between an Owl component and a legacy widget is that the Owl component is async (more than a nextTick) as we wait for the nextAnimationFrame to render. When the rendering is fast enough (e.g. without Owl components), the click event isn't remap to the input yet (because we empty the list HTML node), so the handler is executed only once. [1] https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label Issue reported on task 2204306 closes odoo/odoo#49920 X-original-commit: b02d347e8770835ad28a6487071930a904bce101 Signed-off-by: Lucas Perais (lpe) <lpe@odoo.com> Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/js/views/list/list_renderer.js5
1 files changed, 5 insertions, 0 deletions
diff --git a/addons/web/static/src/js/views/list/list_renderer.js b/addons/web/static/src/js/views/list/list_renderer.js
index 5cf4b022c5d..68a449a9246 100644
--- a/addons/web/static/src/js/views/list/list_renderer.js
+++ b/addons/web/static/src/js/views/list/list_renderer.js
@@ -1109,6 +1109,11 @@ var ListRenderer = BasicRenderer.extend({
_onToggleOptionalColumn: function (ev) {
var self = this;
ev.stopPropagation();
+ // when the input's label is clicked, the click event is also raised on the
+ // input itself (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label),
+ // so this handler is executed twice (except if the rendering is quick enough,
+ // as when we render, we empty the HTML)
+ ev.preventDefault();
var input = ev.currentTarget.querySelector('input');
var fieldIndex = this.optionalColumnsEnabled.indexOf(input.name);
if (fieldIndex >= 0) {