diff --git a/addons/web/static/src/views/list/list_controller.js b/addons/web/static/src/views/list/list_controller.js
index 3cf91d143fb..4f81794fcb9 100644
--- a/addons/web/static/src/views/list/list_controller.js
+++ b/addons/web/static/src/views/list/list_controller.js
@@ -356,7 +356,11 @@ export class ListController extends Component {
}
async downloadExport(fields, import_compat, format) {
- const resIds = await this.getSelectedResIds();
+ let ids = false;
+ if (!this.isDomainSelected) {
+ const resIds = await this.getSelectedResIds();
+ ids = resIds.length > 0 && resIds;
+ }
const exportedFields = fields.map((field) => ({
name: field.name || field.id,
label: field.label || field.string,
@@ -374,7 +378,7 @@ export class ListController extends Component {
domain: this.model.root.domain,
fields: exportedFields,
groupby: this.model.root.groupBy,
- ids: resIds.length > 0 && resIds,
+ ids,
model: this.model.root.resModel,
}),
},
@@ -396,9 +400,7 @@ export class ListController extends Component {
* @private
*/
async onExportData() {
- const resIds = await this.getSelectedResIds();
const dialogProps = {
- resIds,
context: this.props.context,
defaultExportList: this.defaultExportList,
download: this.downloadExport.bind(this),
diff --git a/addons/web/static/tests/views/view_dialogs/export_data_dialog_tests.js b/addons/web/static/tests/views/view_dialogs/export_data_dialog_tests.js
index fabe116c782..b9486cda760 100644
--- a/addons/web/static/tests/views/view_dialogs/export_data_dialog_tests.js
+++ b/addons/web/static/tests/views/view_dialogs/export_data_dialog_tests.js
@@ -612,37 +612,38 @@ QUnit.module("ViewDialogs", (hooks) => {
});
QUnit.test("Export dialog: export list with 'exportable: false'", async function (assert) {
- (serverData.models.partner.fields.not_exportable = {
+ serverData.models.partner.fields.not_exportable = {
string: "Not exportable",
type: "char",
exportable: false,
- }),
- (serverData.models.partner.fields.exportable = { string: "Exportable", type: "char" }),
- await makeView({
- serverData,
- type: "list",
- resModel: "partner",
- arch: `
-
-
-
- `,
- actionMenus: {},
- mockRPC(route, args) {
- if (route === "/web/export/formats") {
- return Promise.resolve([{ tag: "csv", label: "CSV" }]);
+ };
+ serverData.models.partner.fields.exportable = { string: "Exportable", type: "char" };
+
+ await makeView({
+ serverData,
+ type: "list",
+ resModel: "partner",
+ arch: `
+
+
+
+ `,
+ actionMenus: {},
+ mockRPC(route, args) {
+ if (route === "/web/export/formats") {
+ return Promise.resolve([{ tag: "csv", label: "CSV" }]);
+ }
+ if (route === "/web/export/get_fields") {
+ if (!args.parent_field) {
+ return Promise.resolve(fetchedFields.root);
}
- if (route === "/web/export/get_fields") {
- if (!args.parent_field) {
- return Promise.resolve(fetchedFields.root);
- }
- if (args.prefix === "partner_ids") {
- assert.step("fetch fields for 'partner_ids'");
- }
- return Promise.resolve(fetchedFields[args.prefix]);
+ if (args.prefix === "partner_ids") {
+ assert.step("fetch fields for 'partner_ids'");
}
- },
- });
+ return Promise.resolve(fetchedFields[args.prefix]);
+ }
+ },
+ });
await openExportDataDialog();
assert.containsN(target, ".o_export_field", 2, "only two fields are selected in the list");
@@ -728,6 +729,101 @@ QUnit.module("ViewDialogs", (hooks) => {
);
});
+ QUnit.test("ExportDialog: export all records of the domain", async function (assert) {
+ assert.expect(2);
+ let isDomainSelected = false;
+
+ mockDownload(({ data }) => {
+ if (isDomainSelected) {
+ assert.deepEqual(
+ JSON.parse(data.data),
+ {
+ context: { lang: "en", uid: 7, tz: "taht" },
+ model: "partner",
+ domain: [["bar", "!=", "glou"]],
+ groupby: [],
+ ids: false,
+ import_compat: false,
+ fields: [
+ {
+ name: "foo",
+ label: "Foo",
+ type: "char",
+ },
+ {
+ name: "bar",
+ label: "Bar",
+ type: "boolean",
+ },
+ ],
+ },
+ "should be called with correct params when all records are selected"
+ );
+ } else {
+ assert.deepEqual(
+ JSON.parse(data.data),
+ {
+ context: { lang: "en", uid: 7, tz: "taht" },
+ model: "partner",
+ domain: [["bar", "!=", "glou"]],
+ groupby: [],
+ ids: [1],
+ import_compat: false,
+ fields: [
+ {
+ name: "foo",
+ label: "Foo",
+ type: "char",
+ },
+ {
+ name: "bar",
+ label: "Bar",
+ type: "boolean",
+ },
+ ],
+ },
+ "should be called with correct params when only one record is selected"
+ );
+ }
+ return Promise.resolve();
+ });
+
+ await makeView({
+ serverData,
+ type: "list",
+ resModel: "partner",
+ arch: `
+
+
+
+ `,
+ actionMenus: {},
+ domain: [["bar", "!=", "glou"]],
+ mockRPC(route) {
+ if (route === "/web/export/formats") {
+ return Promise.resolve([{ tag: "xls", label: "Excel" }]);
+ }
+ if (route === "/web/export/get_fields") {
+ return Promise.resolve(fetchedFields.root);
+ }
+ },
+ });
+
+ await openExportDataDialog();
+ await click(target.querySelector(".o_select_button"));
+ await click(target.querySelector(".btn-close"));
+
+ isDomainSelected = true;
+ await click(target.querySelector(".o_list_select_domain"));
+ await click(target.querySelector(".o_control_panel .o_cp_action_menus .dropdown-toggle"));
+ await click(
+ target.querySelector(
+ ".o_control_panel .o_cp_action_menus .dropdown-menu span:first-child"
+ )
+ );
+ await click(target.querySelector(".o_select_button"));
+ });
+
QUnit.test("Direct export list", async function (assert) {
assert.expect(2);