From b9ac7090ce181705b0ffaf9c2aeeda67a9308b99 Mon Sep 17 00:00:00 2001
From: Nicolas Lempereur <nle@odoo.com>
Date: Wed, 3 May 2017 13:54:36 +0200
Subject: [PATCH] [FIX] web_kanban: double click double action

When multiple clicking fast (and with the server not too fast), we could
end up with an error (eg. "Cannot read property 'controller' of null").

Something has been done previously to improve this when switching
between views in: fc8a4b5e. This commit do something similar to limit
multiple click on kanban records (doing it as in 26f91c429).

note: master equivalent of 8f1cc2fa (which is for 10.0 up to saas-15)

opw-705329
closes #16775
---
 addons/web/static/src/js/views/kanban/kanban_record.js | 2 ++
 addons/web/static/tests/views/kanban_tests.js          | 5 ++++-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/addons/web/static/src/js/views/kanban/kanban_record.js b/addons/web/static/src/js/views/kanban/kanban_record.js
index e52741f65eb2..5434ed7da72d 100644
--- a/addons/web/static/src/js/views/kanban/kanban_record.js
+++ b/addons/web/static/src/js/views/kanban/kanban_record.js
@@ -39,6 +39,8 @@ var KanbanRecord = Widget.extend({
         this.subWidgets = {};
 
         this._setState(state);
+        // avoid quick multiple clicks
+        this._onKanbanActionClicked = _.debounce(this._onKanbanActionClicked, 300, true);
     },
     start: function () {
         return this._super.apply(this, arguments).then(this._render.bind(this));
diff --git a/addons/web/static/tests/views/kanban_tests.js b/addons/web/static/tests/views/kanban_tests.js
index 1fde65e479da..d7ef88d4c942 100644
--- a/addons/web/static/tests/views/kanban_tests.js
+++ b/addons/web/static/tests/views/kanban_tests.js
@@ -945,7 +945,7 @@ QUnit.module('Views', {
     });
 
     QUnit.test('button executes action and reloads', function (assert) {
-        assert.expect(5);
+        assert.expect(6);
 
         var kanban = createView({
             View: KanbanView,
@@ -975,6 +975,9 @@ QUnit.module('Views', {
         $('button[data-name="a1"]').first().click();
         assert.strictEqual(count, 1, "should have triggered a execute action");
 
+        $('button[data-name="a1"]').first().click();
+        assert.strictEqual(count, 1, "double-click on kanban actions should be debounced");
+
         assert.verifySteps([
             '/web/dataset/search_read',
             '/web/dataset/call_kw/partner/read'
-- 
GitLab