diff --git a/addons/web/static/src/js/views/list/list_editable_renderer.js b/addons/web/static/src/js/views/list/list_editable_renderer.js index 8a6295ce23c..fde02863f33 100644 --- a/addons/web/static/src/js/views/list/list_editable_renderer.js +++ b/addons/web/static/src/js/views/list/list_editable_renderer.js @@ -1807,7 +1807,7 @@ ListRenderer.include({ // ignore clicks if there is a modal, except if the list is in the last // (active) modal - var $modal = $('.modal:last'); + var $modal = $('body > .modal:last'); if ($modal.length) { var $listModal = this.$el.closest('.modal'); if ($modal.prop('id') !== $listModal.prop('id')) { diff --git a/addons/web/static/tests/views/list_tests.js b/addons/web/static/tests/views/list_tests.js index f5c475889c3..d4c503c6cc0 100644 --- a/addons/web/static/tests/views/list_tests.js +++ b/addons/web/static/tests/views/list_tests.js @@ -8276,6 +8276,38 @@ QUnit.module('Views', { form.destroy(); }); + QUnit.test('editable list alongside html field: click out to unselect the row', async function (assert) { + assert.expect(5); + + const form = await createView({ + View: FormView, + model: 'foo', + data: this.data, + arch: ` +
`, + }); + + assert.containsNone(form, '.o_data_row'); + + await testUtils.dom.click(form.$('.o_field_x2many_list_row_add > a')); + assert.containsOnce(form, '.o_data_row'); + assert.hasClass(form.$('.o_data_row'), 'o_selected_row'); + + // click outside to unselect the row + await testUtils.dom.click(document.body); + assert.containsOnce(form, '.o_data_row'); + assert.doesNotHaveClass(form.$('.o_data_row'), 'o_selected_row'); + + form.destroy(); + }); + QUnit.test('list grouped by date:month', async function (assert) { assert.expect(1);