diff --git a/addons/web/static/src/js/views/list/list_controller.js b/addons/web/static/src/js/views/list/list_controller.js index 12a3e8c75e1..24dbc4683dd 100644 --- a/addons/web/static/src/js/views/list/list_controller.js +++ b/addons/web/static/src/js/views/list/list_controller.js @@ -174,9 +174,9 @@ var ListController = BasicController.extend({ this.$buttons.toggleClass('o-editing', mode === 'edit'); const state = this.model.get(this.handle, {raw: true}); if (state.count) { - this.$('.o_list_export_xlsx').show(); + this.$buttons.find('.o_list_export_xlsx').show(); } else { - this.$('.o_list_export_xlsx').hide(); + this.$buttons.find('.o_list_export_xlsx').hide(); } } this._updateSelectionBox(); diff --git a/addons/web/static/tests/views/list_tests.js b/addons/web/static/tests/views/list_tests.js index 012ebedec19..6f17ac1e662 100644 --- a/addons/web/static/tests/views/list_tests.js +++ b/addons/web/static/tests/views/list_tests.js @@ -278,6 +278,25 @@ QUnit.module('Views', { list.destroy(); }); + QUnit.test('export button in empty list view', async function (assert) { + assert.expect(2); + + const list = await createView({ + View: ListView, + model: "foo", + data: this.data, + arch: '', + domain: [["id", "<", 0]], // such that no record matches the domain + }); + + assert.isNotVisible(list.el.querySelector('.o_list_export_xlsx')); + + await list.reload({ domain: [['id', '>', 0]] }); + assert.isVisible(list.el.querySelector('.o_list_export_xlsx')); + + list.destroy(); + }); + QUnit.test('list view with adjacent buttons', async function (assert) { assert.expect(2);