[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
This commit is contained in:
FrancoisGe
2023-08-11 10:29:32 +02:00
parent ea0f441d4d
commit aae9e9a277
2 changed files with 41 additions and 0 deletions
@@ -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));
@@ -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: `
<form>
<field name="p">
<tree>
<field name="display_name" />
</tree>
<form>
<field name="display_name" />
</form>
</field>
</form>`,
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({