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 e52741f65eb..5434ed7da72 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 1fde65e479d..d7ef88d4c94 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'