From 91c32bb980f9890be12acb3a6f7ccc536dae7b17 Mon Sep 17 00:00:00 2001 From: FrancoisGe Date: Wed, 20 Jul 2022 14:33:49 +0000 Subject: [PATCH] [FIX] web: X2m with custom controller The goal of this commit is to allow an X2m in list mode with a custom controller to use the controller context when creating a new line with a 'tab' keydown. Part-of: odoo/odoo#78221 --- .../static/src/views/list/list_renderer.js | 2 +- .../views/fields/one2many_field_tests.js | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/views/list/list_renderer.js b/addons/web/static/src/views/list/list_renderer.js index bfaf66f7bb5..b8060288d59 100644 --- a/addons/web/static/src/views/list/list_renderer.js +++ b/addons/web/static/src/views/list/list_renderer.js @@ -1138,7 +1138,7 @@ export class ListRenderer extends Component { // add a line if (record.checkValidity()) { const { context } = this.creates[0]; - this.props.onAdd(context); + this.props.onAdd({ context }); } } else if ( activeActions.create && 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 02e8404eb1b..906c45f2636 100644 --- a/addons/web/static/tests/views/fields/one2many_field_tests.js +++ b/addons/web/static/tests/views/fields/one2many_field_tests.js @@ -9337,6 +9337,45 @@ QUnit.module("Fields", (hooks) => { } ); + QUnit.test("o2m add a line custom control create editable with 'tab'", async function (assert) { + await makeView({ + type: "form", + resModel: "partner", + serverData, + arch: ` +
+ + + + + + + + + + +
`, + resId: 1, + mockRPC(route, args) { + const { method, kwargs } = args; + if (method === "onchange") { + assert.step("onchange"); + assert.strictEqual(kwargs.context.default_turtle_foo, "soft"); + } + }, + }); + await clickEdit(target); + + await click(target.querySelector(".o_data_row .o_data_cell")); + await editInput(target, "[name='turtle_foo'] input", "Test"); + assert.containsOnce(target, ".o_data_row"); + + triggerHotkey("Tab"); + await nextTick(); + assert.containsN(target, ".o_data_row", 2); + assert.verifySteps(["onchange"]); + }); + QUnit.test("one2many with onchange, required field, shortcut enter", async function (assert) { serverData.models.turtle.onchanges = { turtle_foo: function () {},