diff --git a/addons/web/static/src/search/search_arch_parser.js b/addons/web/static/src/search/search_arch_parser.js index 385254b5586..e9a499d0cad 100644 --- a/addons/web/static/src/search/search_arch_parser.js +++ b/addons/web/static/src/search/search_arch_parser.js @@ -160,7 +160,7 @@ export class SearchArchParser extends XMLParser { preField.defaultAutocompleteValue.label = option[1]; } else if (fieldType === "many2one") { this.labels.push((orm) => { - orm.call(relation, "name_get", [value], { context }).then((results) => { + return orm.call(relation, "name_get", [value], { context }).then((results) => { preField.defaultAutocompleteValue.label = results[0][1]; }); }); diff --git a/addons/web/static/tests/search/search_bar_tests.js b/addons/web/static/tests/search/search_bar_tests.js index 239f54679f2..ed235a3e94f 100644 --- a/addons/web/static/tests/search/search_bar_tests.js +++ b/addons/web/static/tests/search/search_bar_tests.js @@ -998,4 +998,35 @@ QUnit.module("Search", (hooks) => { await triggerEvent(searchInput, null, "keydown", { key: "Enter" }); assert.deepEqual(getDomain(controlPanel), [["company", "=", 5]]); }); + + QUnit.test("should wait label promises for one2many search defaults", async function (assert) { + assert.expect(3); + + const target = getFixture(); + + const def = makeDeferred(); + const mockRPC = async (_, args) => { + if (args.method === "name_get") { + await def; + } + }; + + makeWithSearch({ + serverData, + mockRPC, + resModel: "partner", + Component: ControlPanel, + searchMenuTypes: [], + searchViewId: false, + context: { search_default_company: 1 }, + }); + + await nextTick(); + assert.containsNone(target, ".o_control_panel"); + + def.resolve(); + await nextTick(); + assert.containsOnce(target, ".o_control_panel"); + assert.strictEqual(getFacetTexts(target)[0].replace("\n", ""), "CompanyFirst record"); + }); });