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({