diff --git a/addons/web/static/src/legacy/js/fields/relational_fields.js b/addons/web/static/src/legacy/js/fields/relational_fields.js index 9c69f088615..642000b5a91 100644 --- a/addons/web/static/src/legacy/js/fields/relational_fields.js +++ b/addons/web/static/src/legacy/js/fields/relational_fields.js @@ -2001,7 +2001,7 @@ var FieldOne2Many = FieldX2Many.extend({ index = self.value.data.length - 1; } var newID = self.value.data[index].id; - self.renderer.editRecord(newID); + return self.renderer.editRecord(newID); } } }); diff --git a/addons/web/static/src/legacy/js/views/list/list_editable_renderer.js b/addons/web/static/src/legacy/js/views/list/list_editable_renderer.js index 7fc236edcab..3cab55d0175 100644 --- a/addons/web/static/src/legacy/js/views/list/list_editable_renderer.js +++ b/addons/web/static/src/legacy/js/views/list/list_editable_renderer.js @@ -330,7 +330,7 @@ ListRenderer.include({ editRecord: function (recordID) { var $row = this._getRow(recordID); var rowIndex = $row.prop('rowIndex') - 1; - this._selectCell(rowIndex, 0); + return this._selectCell(rowIndex, 0); }, /** * Gives focus to a specific cell, given its row and its related column. diff --git a/addons/web/static/tests/legacy/fields/relational_fields/field_one2many_tests.js b/addons/web/static/tests/legacy/fields/relational_fields/field_one2many_tests.js index d6dce75948a..ef567a42631 100644 --- a/addons/web/static/tests/legacy/fields/relational_fields/field_one2many_tests.js +++ b/addons/web/static/tests/legacy/fields/relational_fields/field_one2many_tests.js @@ -21,6 +21,8 @@ const { makeLegacyDialogMappingTestEnv } = require('@web/../tests/helpers/legacy const cpHelpers = require('@web/../tests/search/helpers'); var createView = testUtils.createView; const { FieldOne2Many } = relationalFields; +const AbstractFieldOwl = require('web.AbstractFieldOwl'); +const fieldRegistryOwl = require('web.field_registry_owl'); QUnit.module('fields', {}, function () { @@ -10025,6 +10027,69 @@ QUnit.module('fields', {}, function () { form.destroy(); }); + + QUnit.test("add_record in an o2m with an OWL field: wait mounted before success", async function (assert) { + assert.expect(7); + + let testInst = 0; + class TestField extends AbstractFieldOwl { + setup() { + super.setup(); + const ID = testInst++; + owl.hooks.onMounted(() => { + assert.step(`mounted ${ID}`); + }); + + owl.hooks.onWillUnmount(() => { + assert.step(`willUnmount ${ID}`); + }); + } + activate() { + return true; + } + } + + TestField.template = owl.tags.xml`test`; + fieldRegistryOwl.add('test_field', TestField); + + const def = testUtils.makeTestPromise(); + const form = await createView({ + View: FormView, + model: 'partner', + debug: 1, + data: this.data, + arch: `
+ + + + + +
`, + viewOptions: { + mode: 'edit', + }, + }); + + const list = form.renderer.allFieldWidgets[form.handle][0]; + + list.trigger_up('add_record', { + context: [{ + default_name: 'this is a test', + }], + allowWarning: true, + forceEditable: 'bottom', + onSuccess: function () { + assert.step("onSuccess"); + def.resolve(); + } + }); + + await testUtils.nextTick(); + await def; + assert.verifySteps(["mounted 0", "willUnmount 0", "mounted 1", "onSuccess"]); + form.destroy(); + assert.verifySteps(["willUnmount 1"]); + }); }); }); });