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 faeb08d72bc..d49149debc3 100644 --- a/addons/web/static/src/js/views/kanban/kanban_renderer.js +++ b/addons/web/static/src/js/views/kanban/kanban_renderer.js @@ -247,30 +247,33 @@ var KanbanRenderer = BasicRenderer.extend({ } }); - // Enable column sorting - this.$el.sortable({ - axis: 'x', - items: '> .o_kanban_group', - handle: '.o_kanban_header', - cursor: 'move', - revert: 150, - delay: 100, - tolerance: 'pointer', - forcePlaceholderSize: true, - stop: function () { - var ids = []; - self.$('.o_kanban_group').each(function (index, u) { - ids.push($(u).data('id')); - }); - self.trigger_up('resequence_columns', {ids: ids}); - }, - }); + if (groupedByM2O) { + // Enable column sorting + this.$el.sortable({ + axis: 'x', + items: '> .o_kanban_group', + handle: '.o_kanban_header', + cursor: 'move', + revert: 150, + delay: 100, + tolerance: 'pointer', + forcePlaceholderSize: true, + stop: function () { + var ids = []; + self.$('.o_kanban_group').each(function (index, u) { + ids.push($(u).data('id')); + }); + self.trigger_up('resequence_columns', {ids: ids}); + }, + }); - // Column quick create - if (this.columnOptions.group_creatable && groupedByM2O) { - var quickCreate = new ColumnQuickCreate(this); - quickCreate.appendTo(fragment); + // Enable column quickcreate + if (this.columnOptions.group_creatable) { + var quickCreate = new ColumnQuickCreate(this); + quickCreate.appendTo(fragment); + } } + }, /** * Renders an ungrouped kanban view in a fragment. diff --git a/addons/web/static/src/less/kanban_view.less b/addons/web/static/src/less/kanban_view.less index fa66da84641..9b2f914d3b4 100644 --- a/addons/web/static/src/less/kanban_view.less +++ b/addons/web/static/src/less/kanban_view.less @@ -389,7 +389,6 @@ margin: 0 @o-kanban-record-margin; height: 50px; line-height: 2.2; - cursor: move; .o-flex-display(); .o_column_unfold { display: none; @@ -473,7 +472,9 @@ } } } - + &.ui-sortable .o_kanban_header { + cursor: move; + } .o_column_quick_create { background-color: darken(@odoo-webclient-background-color, 10%); cursor: pointer; diff --git a/addons/web/static/test/views/kanban_tests.js b/addons/web/static/test/views/kanban_tests.js index 25b3504eb89..eaa33a0b396 100644 --- a/addons/web/static/test/views/kanban_tests.js +++ b/addons/web/static/test/views/kanban_tests.js @@ -265,7 +265,7 @@ QUnit.module('Views', { }); QUnit.test('create in grouped on m2o', function (assert) { - assert.expect(4); + assert.expect(5); var kanban = createView({ View: KanbanView, @@ -281,6 +281,8 @@ QUnit.module('Views', { }); kanban.renderButtons(); + assert.ok(kanban.$('.o_kanban_view').hasClass('ui-sortable'), + "columns are sortable when grouped by a m2o field"); assert.ok(kanban.$buttons.find('.o-kanban-button-new').hasClass('btn-primary'), "'create' button should be btn-primary for grouped kanban with at least one column"); assert.ok(kanban.$('.o_kanban_view > div:last').hasClass('o_column_quick_create'), @@ -296,7 +298,7 @@ QUnit.module('Views', { }); QUnit.test('create in grouped on char', function (assert) { - assert.expect(3); + assert.expect(4); var kanban = createView({ View: KanbanView, @@ -310,6 +312,8 @@ QUnit.module('Views', { groupBy: ['foo'], }); + assert.ok(!kanban.$('.o_kanban_view').hasClass('ui-sortable'), + "columns aren't sortable when not grouped by a m2o field"); assert.strictEqual(kanban.$('.o_kanban_group').length, 3, "should have " + 3 + " columns"); assert.strictEqual(kanban.$('.o_kanban_group:first() .o_column_title').text(), "yop", "'yop' column should be the first column");