diff --git a/addons/web/static/src/js/views/kanban/kanban_controller.js b/addons/web/static/src/js/views/kanban/kanban_controller.js index ca2999b05b0..3fe6046ea82 100644 --- a/addons/web/static/src/js/views/kanban/kanban_controller.js +++ b/addons/web/static/src/js/views/kanban/kanban_controller.js @@ -39,8 +39,6 @@ var KanbanController = BasicController.extend({ this.on_create = params.on_create; this.hasButtons = params.hasButtons; - - this.createColumnEnabled = this._isCreateColumnEnabled(); }, //-------------------------------------------------------------------------- @@ -58,15 +56,6 @@ var KanbanController = BasicController.extend({ this.$buttons.appendTo($node); } }, - /** - * Override update method to recompute createColumnEnabled. - * - * @returns {Deferred} - */ - update: function () { - this.createColumnEnabled = this._isCreateColumnEnabled(); - return this._super.apply(this, arguments); - }, //-------------------------------------------------------------------------- // Private @@ -92,18 +81,18 @@ var KanbanController = BasicController.extend({ * m2o field and group_create action enabled. * * @private + * @param {Object} state the current state * @returns {boolean} */ - _isCreateColumnEnabled: function () { + _isCreateColumnEnabled: function (state) { var groupCreate = this.is_action_enabled('group_create'); if (!groupCreate) { // pre-return to avoid a lot of the following processing return false; } - var state = this.model.get(this.handle, {raw: true}); var groupByField = state.fields[state.groupedBy[0]]; var groupedByM2o = groupByField && (groupByField.type === 'many2one'); - return groupedByM2o; + return !!groupedByM2o; }, /** * This method calls the server to ask for a resequence. Note that this @@ -121,6 +110,16 @@ var KanbanController = BasicController.extend({ self._updateEnv(); }); }, + /** + * Overrides to update the control panel buttons when the state is updated. + * + * @override + * @private + */ + _update: function () { + this._updateButtons(); + return this._super.apply(this, arguments); + }, /** * In grouped mode, set 'Create' button as btn-default if there is no column * (except if we can't create new columns) @@ -130,12 +129,9 @@ var KanbanController = BasicController.extend({ */ _updateButtons: function () { if (this.$buttons) { - var data = this.model.get(this.handle, {raw: true}); - var grouped = data.groupedBy.length; - var createMuted = grouped && data.data.length === 0 && this.createColumnEnabled; - this.$buttons.find('.o-kanban-button-new') - .toggleClass('btn-primary', !createMuted) - .toggleClass('btn-default', createMuted); + var state = this.model.get(this.handle, {raw: true}); + var createHidden = state.data.length === 0 && this._isCreateColumnEnabled(state); + this.$buttons.find('.o-kanban-button-new').toggleClass('o_hidden', createHidden); } }, diff --git a/addons/web/static/tests/views/kanban_tests.js b/addons/web/static/tests/views/kanban_tests.js index b899fee7a64..5d5782bdd6a 100644 --- a/addons/web/static/tests/views/kanban_tests.js +++ b/addons/web/static/tests/views/kanban_tests.js @@ -2545,15 +2545,15 @@ QUnit.module('Views', { groupBy: ['product_id'], }); - assert.ok(kanban.$buttons.find('.o-kanban-button-new').hasClass('btn-default'), - "Create button shouldn't be highlighted"); + assert.ok(kanban.$buttons.find('.o-kanban-button-new').hasClass('o_hidden'), + "Create button should be hidden"); kanban.$('.o_column_quick_create').click(); kanban.$('.o_column_quick_create input').val('new column'); kanban.$('.o_column_quick_create button.o_kanban_add').click(); - assert.ok(kanban.$buttons.find('.o-kanban-button-new').hasClass('btn-primary'), - "Create button should now be highlighted"); + assert.notOk(kanban.$buttons.find('.o-kanban-button-new').hasClass('o_hidden'), + "Create button should now be visible"); kanban.destroy(); });