diff --git a/addons/web/static/src/webclient/actions/action_service.js b/addons/web/static/src/webclient/actions/action_service.js index a66171235e1..8d6a114e510 100644 --- a/addons/web/static/src/webclient/actions/action_service.js +++ b/addons/web/static/src/webclient/actions/action_service.js @@ -439,12 +439,15 @@ function makeActionManager(env) { }, }); - if (view.type === "form" && action.target === "new") { - viewProps.mode = "edit"; - } - - if (action.flags && "mode" in action.flags && view.type === "form") { - viewProps.mode = action.flags.mode; + if (view.type === "form") { + if (action.target === "new") { + viewProps.mode = "edit"; + } else if (context.form_view_initial_mode) { + viewProps.mode = context.form_view_initial_mode; + } + if (action.flags && "mode" in action.flags) { + viewProps.mode = action.flags.mode; + } } if (target === "inline") { diff --git a/addons/web/static/tests/webclient/actions/window_action_tests.js b/addons/web/static/tests/webclient/actions/window_action_tests.js index 840fbf2adbe..91a89df656f 100644 --- a/addons/web/static/tests/webclient/actions/window_action_tests.js +++ b/addons/web/static/tests/webclient/actions/window_action_tests.js @@ -2264,4 +2264,47 @@ QUnit.module("ActionManager", (hooks) => { assert.containsNone(target, ".o_view_nocontent"); assert.containsOnce(target, "table"); }); + + QUnit.test("process context.form_view_initial_mode", async function (assert) { + serverData.views = { + "partner,false,form": `
`, + "partner,false,search": `