From ae7f4c0485590623f2cd66cfa4aeb6b5c931047c Mon Sep 17 00:00:00 2001 From: qsm-odoo Date: Thu, 14 Sep 2017 14:25:24 +0200 Subject: [PATCH] [FIX] web: always quickcreate in the first kanban column KanbanColumn instances are saved in an array in the renderer. The quick create widget is always put in the first column found in this array. Unfortunately, the array elements' order was broken after some operations where column(s) are rerendered (like moving records). --- .../src/js/views/kanban/kanban_renderer.js | 6 +-- addons/web/static/tests/views/kanban_tests.js | 39 +++++++++++++++++++ 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/addons/web/static/src/js/views/kanban/kanban_renderer.js b/addons/web/static/src/js/views/kanban/kanban_renderer.js index 0bbc7aa2698..cd9572b0fc5 100644 --- a/addons/web/static/src/js/views/kanban/kanban_renderer.js +++ b/addons/web/static/src/js/views/kanban/kanban_renderer.js @@ -138,10 +138,10 @@ var KanbanRenderer = BasicRenderer.extend({ * @returns {Deferred} */ updateColumn: function (localID, columnState) { - var column = _.findWhere(this.widgets, {db_id: localID}); - this.widgets.splice(_.indexOf(this.widgets, column), 1); // remove column from widgets' list var newColumn = new KanbanColumn(this, columnState, this.columnOptions, this.recordOptions); - this.widgets.push(newColumn); + var index = _.findIndex(this.widgets, {db_id: localID}); + var column = this.widgets[index]; + this.widgets[index] = newColumn; return newColumn.insertAfter(column.$el).then(column.destroy.bind(column)); }, /** diff --git a/addons/web/static/tests/views/kanban_tests.js b/addons/web/static/tests/views/kanban_tests.js index 72e3aedd1ef..64decd5f657 100644 --- a/addons/web/static/tests/views/kanban_tests.js +++ b/addons/web/static/tests/views/kanban_tests.js @@ -1824,6 +1824,45 @@ QUnit.module('Views', { "the add button should still be visible"); kanban.destroy(); }); + + QUnit.test('keep adding quickcreate in first column after a record from this column was moved', function (assert) { + assert.expect(2); + + var kanban = createView({ + View: KanbanView, + model: 'partner', + data: this.data, + arch: + '' + + '' + + '' + + '
' + + '
' + + '
', + groupBy: ['int_field'], + mockRPC: function (route, args) { + if (route === '/web/dataset/resequence') { + return $.when(true); + } + return this._super(route, args); + }, + }); + + var $quickCreateGroup; + var $groups; + _quickCreateAndTest(); + testUtils.dragAndDrop($groups.first().find('.o_kanban_record:first'), $groups.eq(1)); + _quickCreateAndTest(); + kanban.destroy(); + + function _quickCreateAndTest() { + kanban.$buttons.find('.o-kanban-button-new').click(); + $quickCreateGroup = kanban.$('.o_kanban_quick_create').closest('.o_kanban_group'); + $groups = kanban.$('.o_kanban_group'); + assert.strictEqual($quickCreateGroup[0], $groups[0], + "quick create should have been added in the first column"); + } + }); }); });