diff --git a/addons/web/static/src/views/fields/many2one/many2one_field.js b/addons/web/static/src/views/fields/many2one/many2one_field.js index 61c8b6ec3b9..998256657dc 100644 --- a/addons/web/static/src/views/fields/many2one/many2one_field.js +++ b/addons/web/static/src/views/fields/many2one/many2one_field.js @@ -104,7 +104,7 @@ export class Many2OneField extends Component { }; this.state = useState({ - isFloating: !this.value, + isFloating: false, }); this.computeActiveActions(this.props); @@ -137,6 +137,7 @@ export class Many2OneField extends Component { if (params.triggeredOnBlur) { return this.openConfirmationDialog(name); } + this.state.isFloating = false; return this.updateRecord([false, name]); }; } @@ -146,8 +147,6 @@ export class Many2OneField extends Component { }; onWillUpdateProps(async (nextProps) => { - this.state.isFloating = - "value" in nextProps ? !nextProps.value : !nextProps.record.data[nextProps.name]; this.computeActiveActions(nextProps); }); } diff --git a/addons/web/static/tests/views/fields/many2one_field_tests.js b/addons/web/static/tests/views/fields/many2one_field_tests.js index 2c09edbca4e..bf7d1cd6002 100644 --- a/addons/web/static/tests/views/fields/many2one_field_tests.js +++ b/addons/web/static/tests/views/fields/many2one_field_tests.js @@ -741,7 +741,7 @@ QUnit.module("Fields", (hooks) => { const input = target.querySelector(".o_field_widget[name=user_id] input"); await editInput(input, null, "yy"); await clickOpenedDropdownItem(target, "user_id", 'Create "yy"'); - + assert.containsOnce(target, ".o_external_button"); assert.verifySteps(["name_create"]); } ); @@ -4487,4 +4487,32 @@ QUnit.module("Fields", (hooks) => { "aaa" ); }); + + QUnit.test( + "external button must be displayed after the update caused by an onchange", + async function (assert) { + serverData.models.partner.onchanges = { + display_name: function (obj) { + if (obj.display_name) { + obj.trululu = 1; + } + }, + }; + await makeView({ + type: "form", + resModel: "partner", + serverData, + arch: ` +
`, + }); + + assert.containsNone(target, ".o_external_button"); + + await editInput(target, "[name=display_name] input", "new value"); + assert.containsOnce(target, ".o_external_button"); + } + ); });