diff --git a/addons/web/static/src/search/search_arch_parser.js b/addons/web/static/src/search/search_arch_parser.js index 4556c9283ffb1f3653509f01aae76e03de5ee702..60d59d3745a5e07b264f878f2721ab42f98cc40c 100644 --- a/addons/web/static/src/search/search_arch_parser.js +++ b/addons/web/static/src/search/search_arch_parser.js @@ -162,7 +162,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 a70eb178bc88d8cf0b01a37cbc64604eb898bd15..3b94ca9901f126d72b7a738eba1515f7c4b76110 100644 --- a/addons/web/static/tests/search/search_bar_tests.js +++ b/addons/web/static/tests/search/search_bar_tests.js @@ -2,7 +2,14 @@ import { registerCleanup } from "@web/../tests/helpers/cleanup"; import { ControlPanel } from "@web/search/control_panel/control_panel"; -import { click, makeDeferred, nextTick, patchWithCleanup, triggerEvent } from "../helpers/utils"; +import { + click, + getFixture, + makeDeferred, + nextTick, + patchWithCleanup, + triggerEvent, +} from "../helpers/utils"; import { editSearch, getFacetTexts, @@ -929,4 +936,35 @@ QUnit.module("Search", (hooks) => { await triggerEvent(document.activeElement, 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"); + }); });