From 009fe3e81bc982f25b052dc4430f6a232e4bff95 Mon Sep 17 00:00:00 2001 From: Aaron Bohy Date: Fri, 27 Mar 2020 13:54:46 +0000 Subject: [PATCH] [FIX] web: list: keep header checkbox selected ... when toggling an optional field. This bug wasn't really important until now, but with the new selection mechanism, it could lead to weird situations (e.g. the selection box says that all records are selected, but the thead checkbox isn't checked). Part of task 2185145 --- .../static/src/js/views/list/list_renderer.js | 3 ++ addons/web/static/tests/views/list_tests.js | 49 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/addons/web/static/src/js/views/list/list_renderer.js b/addons/web/static/src/js/views/list/list_renderer.js index 418c39b14e0..5cf4b022c5d 100644 --- a/addons/web/static/src/js/views/list/list_renderer.js +++ b/addons/web/static/src/js/views/list/list_renderer.js @@ -989,6 +989,9 @@ var ListRenderer = BasicRenderer.extend({ return _.contains(self.selection, $(el).data('id')); }); $checked_rows.find('.o_list_record_selector input').prop('checked', true); + if ($checked_rows.length === self.$('.o_data_row').length) { // all rows are checked + self.$('thead .o_list_record_selector input').prop('checked', true); + } } }); return Promise.all([this._super.apply(this, arguments), prom]); diff --git a/addons/web/static/tests/views/list_tests.js b/addons/web/static/tests/views/list_tests.js index f2a49f5c339..94a7a3bb156 100644 --- a/addons/web/static/tests/views/list_tests.js +++ b/addons/web/static/tests/views/list_tests.js @@ -8839,6 +8839,55 @@ QUnit.module('Views', { list.destroy(); }); + QUnit.test('selection is kept when optional fields are toggled', async function (assert) { + assert.expect(7); + + var RamStorageService = AbstractStorageService.extend({ + storage: new RamStorage(), + }); + + var list = await createView({ + View: ListView, + model: 'foo', + data: this.data, + arch: '' + + '' + + '' + + '', + services: { + local_storage: RamStorageService, + }, + }); + + assert.containsN(list, 'th', 2); + + // select a record + await testUtils.dom.click(list.$('.o_data_row .o_list_record_selector input:first')); + + assert.containsOnce(list, '.o_list_record_selector input:checked'); + + // add an optional field + await testUtils.dom.click(list.$('table .o_optional_columns_dropdown_toggle')); + await testUtils.dom.click(list.$('div.o_optional_columns div.dropdown-item:first input')); + assert.containsN(list, 'th', 3); + + assert.containsOnce(list, '.o_list_record_selector input:checked'); + + // select all records + await testUtils.dom.click(list.$('thead .o_list_record_selector input')); + + assert.containsN(list, '.o_list_record_selector input:checked', 5); + + // remove an optional field + await testUtils.dom.click(list.$('table .o_optional_columns_dropdown_toggle')); + await testUtils.dom.click(list.$('div.o_optional_columns div.dropdown-item:first input')); + assert.containsN(list, 'th', 2); + + assert.containsN(list, '.o_list_record_selector input:checked', 5); + + list.destroy(); + }); + QUnit.test('change the viewType of the current action', async function (assert) { assert.expect(25);