diff --git a/addons/web/static/src/js/views/kanban/kanban_column_quick_create.js b/addons/web/static/src/js/views/kanban/kanban_column_quick_create.js index b3c57bce832..66445788682 100644 --- a/addons/web/static/src/js/views/kanban/kanban_column_quick_create.js +++ b/addons/web/static/src/js/views/kanban/kanban_column_quick_create.js @@ -36,6 +36,14 @@ var ColumnQuickCreate = Widget.extend({ this.$input = this.$('input'); return this._super.apply(this, arguments); }, + /** + * Called each time the quick create is attached into the DOM + */ + on_attach_callback: function () { + if (!this.folded) { + this.$input.focus(); + } + }, //-------------------------------------------------------------------------- // Public 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 3fe6046ea82..b26ff2360ef 100644 --- a/addons/web/static/src/js/views/kanban/kanban_controller.js +++ b/addons/web/static/src/js/views/kanban/kanban_controller.js @@ -40,6 +40,12 @@ var KanbanController = BasicController.extend({ this.on_create = params.on_create; this.hasButtons = params.hasButtons; }, + /** + * Called each time the kanban view is attached into the DOM. + */ + on_attach_callback: function () { + this.renderer.on_attach_callback(); + }, //-------------------------------------------------------------------------- // Public 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 dbc44d30172..c3a14473787 100644 --- a/addons/web/static/src/js/views/kanban/kanban_renderer.js +++ b/addons/web/static/src/js/views/kanban/kanban_renderer.js @@ -109,6 +109,14 @@ var KanbanRenderer = BasicRenderer.extend({ this._setState(state); }, + /** + * Called each time the renderer is attached into the DOM. + */ + on_attach_callback: function () { + if (this.quickCreate) { + this.quickCreate.on_attach_callback(); + } + }, //-------------------------------------------------------------------------- // Public @@ -284,7 +292,13 @@ var KanbanRenderer = BasicRenderer.extend({ // Enable column quickcreate if (this.createColumnEnabled) { this.quickCreate = new ColumnQuickCreate(this); - this.quickCreate.appendTo(fragment); + this.quickCreate.appendTo(fragment).then(function () { + // Open it directly if there is no column yet + if (!self.state.data.length) { + self.quickCreate.toggleFold(); + } + }); + } } diff --git a/addons/web/static/tests/views/kanban_tests.js b/addons/web/static/tests/views/kanban_tests.js index 5d5782bdd6a..e7c96525d11 100644 --- a/addons/web/static/tests/views/kanban_tests.js +++ b/addons/web/static/tests/views/kanban_tests.js @@ -1888,6 +1888,33 @@ QUnit.module('Views', { kanban.destroy(); }); + QUnit.test('quick create column should be opened if there is no column', function (assert) { + assert.expect(3); + + var kanban = createView({ + View: KanbanView, + model: 'partner', + data: this.data, + arch: '' + + '' + + '' + + '
' + + '
' + + '
', + groupBy: ['product_id'], + domain: [['foo', '=', 'norecord']], + }); + + assert.strictEqual(kanban.$('.o_kanban_group').length, 0, + "there should be no column"); + assert.strictEqual(kanban.$('.o_column_quick_create').length, 1, + "should have a quick create column"); + assert.ok(kanban.$('.o_column_quick_create input').is(':visible'), + "the quick create should be opened"); + + kanban.destroy(); + }); + QUnit.test('cancel column quick create by pressing ESCAPE', function (assert) { assert.expect(4);