From aae9e9a277726bcf9cd877f6feada1a714e21832 Mon Sep 17 00:00:00 2001 From: FrancoisGe Date: Thu, 10 Aug 2023 08:13:37 +0000 Subject: [PATCH] [FIX] web: close button discard x2m Before this commit, editing a x2m record in a dialog then clicking on the close button (X) does not discard the change. How to reproduce: - Go to a form view with an x2m in non-editable list mode - Click on an x2m record to open it in a dialog - Edit a field - Click on the close button (X) Before this commit: The change is kept After this commit: The change is discarded Part-of: odoo/odoo#131662 --- .../src/views/fields/relational_utils.js | 1 + .../views/fields/one2many_field_tests.js | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/addons/web/static/src/views/fields/relational_utils.js b/addons/web/static/src/views/fields/relational_utils.js index 82735eab8b1..664e1986050 100644 --- a/addons/web/static/src/views/fields/relational_utils.js +++ b/addons/web/static/src/views/fields/relational_utils.js @@ -509,6 +509,7 @@ export class X2ManyFieldDialog extends Component { this.title = this.props.title; this.contentClass = computeViewClassName("form", this.archInfo.xmlDoc); useSubEnv({ config: this.props.config }); + this.env.dialogData.close = () => this.discard(); useBus(this.record.model.bus, "update", () => this.render(true)); diff --git a/addons/web/static/tests/views/fields/one2many_field_tests.js b/addons/web/static/tests/views/fields/one2many_field_tests.js index 8cc6bda3ca1..addb3bbc375 100644 --- a/addons/web/static/tests/views/fields/one2many_field_tests.js +++ b/addons/web/static/tests/views/fields/one2many_field_tests.js @@ -4265,6 +4265,46 @@ QUnit.module("Fields", (hooks) => { ]); }); + QUnit.test("discard O2M field with close button", async function (assert) { + serverData.models.partner.records[0].p = [2]; + await makeView({ + type: "form", + resModel: "partner", + serverData, + arch: ` +
+ + + + + + + + + `, + resId: 1, + }); + assert.strictEqual(target.querySelector(".o_data_row").textContent, "second record"); + + await click(target.querySelector(".o_data_row .o_data_cell")); + assert.containsOnce(target, ".o_dialog"); + assert.strictEqual( + target.querySelector(".modal .o_field_widget[name=display_name] input").value, + "second record" + ); + + await editInput(target, ".modal .o_field_widget[name=display_name] input", "plop"); + await click(target.querySelector(".modal .btn-close")); + assert.strictEqual(target.querySelector(".o_data_row").textContent, "second record"); + + await click(target.querySelector(".o_data_row .o_data_cell")); + assert.containsOnce(target, ".o_dialog"); + assert.strictEqual( + target.querySelector(".modal .o_field_widget[name=display_name] input").value, + "second record" + ); + }); + QUnit.test("editable one2many list, adding line when only one page", async function (assert) { serverData.models.partner.records[0].turtles = [1, 2, 3]; await makeView({