From 857cbba5a16cbe0bd87ae0994665f9f57648ea1d Mon Sep 17 00:00:00 2001 From: FrancoisGe Date: Fri, 15 Jul 2022 08:55:49 +0000 Subject: [PATCH] [FIX] web: X2many focus handle field Before this commit, in an X2many in editable list mode with a handle field, if you passed a record in edit mode, the handle field was focused. The expected behaviour is to focus the first editable field. Part-of: odoo/odoo#96101 --- .../static/src/views/list/list_renderer.js | 2 +- .../views/fields/one2many_field_tests.js | 35 +++++++++++++++++++ 2 files changed, 36 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 9fec42948e9..e6aabcfeed3 100644 --- a/addons/web/static/src/views/list/list_renderer.js +++ b/addons/web/static/src/views/list/list_renderer.js @@ -364,7 +364,7 @@ export class ListRenderer extends Component { ); if (cell) { const toFocus = getElementToFocus(cell); - if (toFocus) { + if (cell !== toFocus) { this.focus(toFocus); break; } 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 4c06db3dac3..0eb73b9c506 100644 --- a/addons/web/static/tests/views/fields/one2many_field_tests.js +++ b/addons/web/static/tests/views/fields/one2many_field_tests.js @@ -3786,6 +3786,41 @@ QUnit.module("Fields", (hooks) => { assert.hasClass(target.querySelectorAll(".o_data_row")[3], "o_selected_row"); }); + QUnit.test( + "creating a new line in an o2m with an handle field does not focus the handler", + async function (assert) { + await makeView({ + type: "form", + resModel: "partner", + serverData, + arch: ` +
+ + + + + + +
`, + resId: 2, + }); + + await clickEdit(target); + await addRow(target); + assert.strictEqual( + document.activeElement, + target.querySelector("[name='turtle_foo'] input") + ); + + triggerHotkey("Enter"); + await nextTick(); + assert.strictEqual( + document.activeElement, + target.querySelector("[name='turtle_foo'] input") + ); + } + ); + QUnit.test("editing a o2m, with required field and onchange", async function (assert) { serverData.models.turtle.fields.turtle_foo.required = true; delete serverData.models.turtle.fields.turtle_foo.default;