diff --git a/addons/web/static/src/js/views/kanban/kanban_renderer_mobile.js b/addons/web/static/src/js/views/kanban/kanban_renderer_mobile.js index ce487af4b7a..7614d6bca95 100644 --- a/addons/web/static/src/js/views/kanban/kanban_renderer_mobile.js +++ b/addons/web/static/src/js/views/kanban/kanban_renderer_mobile.js @@ -12,6 +12,7 @@ var config = require('web.config'); var core = require('web.core'); var KanbanRenderer = require('web.KanbanRenderer'); +var _t = core._t; var qweb = core.qweb; if (!config.device.isMobile) { @@ -138,8 +139,19 @@ KanbanRenderer.include({ * @private */ _renderGrouped: function (fragment) { + var data = []; + _.each(this.state.data, function (group) { + if (!group.value) { + group = _.extend({}, group, {value: _t('Undefined')}); + data.unshift(group); + } + else { + data.push(group); + } + }); + var $tabs = $(qweb.render('KanbanView.MobileTabs', { - data: this.state.data, + data: data, })); $tabs.appendTo(fragment); return this._super.apply(this, arguments); diff --git a/addons/web/static/tests/views/kanban_mobile_tests.js b/addons/web/static/tests/views/kanban_mobile_tests.js index e061ff14b04..0ee35c2c9c3 100644 --- a/addons/web/static/tests/views/kanban_mobile_tests.js +++ b/addons/web/static/tests/views/kanban_mobile_tests.js @@ -56,7 +56,7 @@ QUnit.module('Views', { QUnit.module('KanbanView Mobile'); QUnit.test('mobile grouped rendering', function (assert) { - assert.expect(8); + assert.expect(9); var kanban = createView({ View: KanbanView, @@ -97,6 +97,38 @@ QUnit.module('Views', { assert.ok(kanban.$('.o_kanban_group:nth(1) > div:nth(1)').hasClass('o_kanban_quick_create'), "clicking on create should open the quick_create in the second column"); + // kanban column should match kanban mobile tabs + var column_ids = kanban.$('.o_kanban_group').map(function(){ return $(this).data('id') }).get(); + var tab_ids = kanban.$('.o_kanban_mobile_tab').map(function(){ return $(this).data('id') }).get(); + assert.deepEqual(column_ids, tab_ids, "all columns data-id should match mobile tabs data-id"); + + kanban.destroy(); + }); + QUnit.test('mobile grouped with undefined column', function (assert) { + assert.expect(3); + + var kanban = createView({ + View: KanbanView, + model: 'partner', + data: this.data, + arch: '' + + '' + + '
' + + '
' + + '
', + groupBy: ['product_id'], + }); + + // first column should be undefined with framework unique identifier + assert.strictEqual(kanban.$('.o_kanban_group').length, 3, "should have 3 columns" ); + assert.strictEqual(kanban.$('.o_kanban_group:first-child[data-id^="partner_"]').length, 1, + "Undefined column should be first and have unique framework identifier as data-id") + + // kanban column should match kanban mobile tabs + var column_ids = kanban.$('.o_kanban_group').map(function(){ return $(this).data('id') }).get(); + var tab_ids = kanban.$('.o_kanban_mobile_tab').map(function(){ return $(this).data('id') }).get(); + assert.deepEqual(column_ids, tab_ids, "all columns data-id should match mobile tabs data-id"); + kanban.destroy(); }); QUnit.test('mobile grouped on many2one rendering', function (assert) {