diff options
| author | Aaron Bohy <aab@odoo.com> | 2020-07-03 15:12:36 +0000 |
|---|---|---|
| committer | Aaron Bohy <aab@odoo.com> | 2020-07-07 10:14:54 +0000 |
| commit | e55ee0bb1b285653ed23cbc8586f8c948fa7972b (patch) | |
| tree | af505e90c2658a7c1a5e9d192ab0578315cb6617 /addons/web | |
| parent | 5a60dbccd48fea052bf203c11d43e367b6bb4360 (diff) | |
[FIX] web: kanban: drag column with sample data
Before this commit, in a grouped kanban view with sample data (e.g.
crm.lead), one could toggle the 'settings' dropdown menu of a
group, and then drag&drop the group by clicking on the muted "Fold"
item in the dropdown.
After this commit, dragging a column is only possible by clicking
on the column title (but not on the 'config' or '+' icons, nor the
config dropdown).
Task 2290197
closes odoo/odoo#54179
X-original-commit: 58c38a024c96eba3469c142a8422b7bd0ab54ea4
Signed-off-by: Mathieu Duckerts-Antoine <Polymorphe57@users.noreply.github.com>
Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
Diffstat (limited to 'addons/web')
4 files changed, 64 insertions, 9 deletions
diff --git a/addons/web/static/src/js/views/kanban/kanban_column.js b/addons/web/static/src/js/views/kanban/kanban_column.js index 03c34b358e0..c62c8f26c15 100644 --- a/addons/web/static/src/js/views/kanban/kanban_column.js +++ b/addons/web/static/src/js/views/kanban/kanban_column.js @@ -29,7 +29,8 @@ var KanbanColumn = Widget.extend({ 'click .o_kanban_load_more': '_onLoadMore', 'click .o_kanban_toggle_fold': '_onToggleFold', 'click .o_column_archive_records': '_onArchiveRecords', - 'click .o_column_unarchive_records': '_onUnarchiveRecords' + 'click .o_column_unarchive_records': '_onUnarchiveRecords', + 'click .o_kanban_config .dropdown-menu': '_onConfigDropdownClicked', }, /** * @override @@ -296,6 +297,15 @@ var KanbanColumn = Widget.extend({ this._cancelQuickCreate(); }, /** + * Prevent from closing the config dropdown when the user clicks on a + * disabled item (e.g. 'Fold' in sample mode). + * + * @private + */ + _onConfigDropdownClicked(ev) { + ev.stopPropagation(); + }, + /** * @private * @param {MouseEvent} event */ 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 cfb511ef79b..8ea7abaa7af 100644 --- a/addons/web/static/src/js/views/kanban/kanban_renderer.js +++ b/addons/web/static/src/js/views/kanban/kanban_renderer.js @@ -362,7 +362,7 @@ var KanbanRenderer = BasicRenderer.extend({ this.$el.sortable({ axis: 'x', items: '> .o_kanban_group', - handle: '.o_kanban_header_title', + handle: '.o_column_title', cursor: 'move', revert: 150, delay: 100, diff --git a/addons/web/static/src/scss/kanban_view.scss b/addons/web/static/src/scss/kanban_view.scss index f9952f7bea9..ee7f3f2aa05 100644 --- a/addons/web/static/src/scss/kanban_view.scss +++ b/addons/web/static/src/scss/kanban_view.scss @@ -459,6 +459,9 @@ .o_kanban_config { visibility: hidden; + > .dropdown-menu { + cursor: default; + } i { @include o-kanban-icon; } @@ -488,7 +491,7 @@ } } - &.ui-sortable .o_kanban_header_title { + &.ui-sortable .o_kanban_header_title .o_column_title { cursor: move; } diff --git a/addons/web/static/tests/views/kanban_tests.js b/addons/web/static/tests/views/kanban_tests.js index 23a91317fac..6491976fb79 100644 --- a/addons/web/static/tests/views/kanban_tests.js +++ b/addons/web/static/tests/views/kanban_tests.js @@ -3346,8 +3346,8 @@ QUnit.module('Views', { // test column drag and drop having an 'Undefined' column await testUtils.dom.dragAndDrop( - kanban.$('.o_kanban_header_title:first'), - kanban.$('.o_kanban_header_title:last'), {position: 'right'} + kanban.$('.o_column_title:first'), + kanban.$('.o_column_title:last'), {position: 'right'} ); assert.strictEqual(resequencedIDs, undefined, "resequencing require at least 2 not Undefined columns"); @@ -3356,14 +3356,14 @@ QUnit.module('Views', { await testUtils.dom.click(kanban.$('.o_column_quick_create button.o_kanban_add')); var newColumnID = kanban.$('.o_kanban_group:last').data('id'); await testUtils.dom.dragAndDrop( - kanban.$('.o_kanban_header_title:first'), - kanban.$('.o_kanban_header_title:last'), {position: 'right'} + kanban.$('.o_column_title:first'), + kanban.$('.o_column_title:last'), {position: 'right'} ); assert.deepEqual([3, newColumnID], resequencedIDs, "moving the Undefined column should not affect order of other columns"); await testUtils.dom.dragAndDrop( - kanban.$('.o_kanban_header_title:first'), - kanban.$('.o_kanban_header_title:nth(1)'), {position: 'right'} + kanban.$('.o_column_title:first'), + kanban.$('.o_column_title:nth(1)'), {position: 'right'} ); await nextTick(); // wait for resequence after drag and drop assert.deepEqual([newColumnID, 3], resequencedIDs, @@ -4499,6 +4499,48 @@ QUnit.module('Views', { kanban.destroy(); }); + QUnit.test('empty grouped kanban with sample data: cannot fold a column', async function (assert) { + // folding a column in grouped kanban with sample data is disabled, for the sake of simplicity + assert.expect(5); + + const kanban = await createView({ + arch: ` + <kanban sample="1"> + <field name="product_id"/> + <templates> + <div t-name="kanban-box"> + <field name="foo"/> + </div> + </templates> + </kanban>`, + data: this.data, + groupBy: ['product_id'], + model: 'partner', + View: KanbanView, + async mockRPC(route, { kwargs, method }) { + const result = await this._super(...arguments); + if (method === 'web_read_group') { + // override read_group to return a single, empty group + result.groups = result.groups.slice(0, 1); + result.groups[0][`${kwargs.groupby[0]}_count`] = 0; + result.length = 1; + } + return result; + }, + }); + + assert.hasClass(kanban, 'o_view_sample_data'); + assert.containsOnce(kanban, '.o_kanban_group'); + assert.ok(kanban.$('.o_kanban_record').length > 0, 'should contain sample records'); + + await testUtils.dom.click(kanban.el.querySelector('.o_kanban_config > a')); + + assert.hasClass(kanban.el.querySelector('.o_kanban_config .o_kanban_toggle_fold'), 'o_sample_data_disabled'); + assert.hasClass(kanban.el.querySelector('.o_kanban_config .o_kanban_toggle_fold'), 'disabled'); + + kanban.destroy(); + }); + QUnit.skip('empty grouped kanban with sample data: fold/unfold a column', async function (assert) { // folding/unfolding of grouped kanban with sample data is currently disabled assert.expect(8); |
