diff --git a/addons/web/static/src/search/layout.js b/addons/web/static/src/search/layout.js
index 81fc11a1d97..2ad35ba00cb 100644
--- a/addons/web/static/src/search/layout.js
+++ b/addons/web/static/src/search/layout.js
@@ -1,7 +1,6 @@
/** @odoo-module **/
-import { ControlPanel } from "@web/search/control_panel/control_panel";
-import { SearchPanel } from "@web/search/search_panel/search_panel";
+import { pick } from "@web/core/utils/objects";
const { Component } = owl;
@@ -10,11 +9,7 @@ const { Component } = owl;
* @returns {Object}
*/
export function extractLayoutComponents(params) {
- return {
- ControlPanel: params.ControlPanel || ControlPanel,
- SearchPanel: params.SearchPanel || SearchPanel,
- Banner: params.Banner || false,
- };
+ return pick(params, "ControlPanel", "SearchPanel", "Banner");
}
export class Layout extends Component {
diff --git a/addons/web/static/src/search/layout.xml b/addons/web/static/src/search/layout.xml
index 15b16619149..357c9467aa3 100644
--- a/addons/web/static/src/search/layout.xml
+++ b/addons/web/static/src/search/layout.xml
@@ -7,7 +7,7 @@
-
+
diff --git a/addons/web/static/src/search/search_model.js b/addons/web/static/src/search/search_model.js
index e3b17b43d0a..9e882bd7a11 100644
--- a/addons/web/static/src/search/search_model.js
+++ b/addons/web/static/src/search/search_model.js
@@ -1378,7 +1378,7 @@ export class SearchModel extends EventBus {
* is instanciated in a view (this doesn't apply for any other action type).
* @private
* @param {Object} [display={}]
- * @returns {{ controlPanel: Object | false, searchPanel: boolean }}
+ * @returns {{ controlPanel: Object | false, searchPanel: boolean, banner: boolean }}
*/
_getDisplay(display = {}) {
const { viewTypes } = this.searchPanelInfo;
diff --git a/addons/web/static/src/views/view.js b/addons/web/static/src/views/view.js
index 908035342a4..10f338c3f1e 100644
--- a/addons/web/static/src/views/view.js
+++ b/addons/web/static/src/views/view.js
@@ -5,8 +5,11 @@ import { registry } from "@web/core/registry";
import { KeepLast } from "@web/core/utils/concurrency";
import { useService } from "@web/core/utils/hooks";
import { deepCopy, pick } from "@web/core/utils/objects";
+import { ControlPanel } from "@web/search/control_panel/control_panel";
import { extractLayoutComponents } from "@web/search/layout";
+import { SearchPanel } from "@web/search/search_panel/search_panel";
import { WithSearch } from "@web/search/with_search/with_search";
+import { OnboardingBanner } from "@web/views/onboarding_banner";
import { useActionLinks } from "@web/views/view_hook";
const { Component, markRaw, onWillUpdateProps, onWillStart, toRaw, useSubEnv } = owl;
@@ -22,6 +25,9 @@ const viewRegistry = registry.category("views");
* @property {() => Object} getPagerProps
* @property {Object[]} viewSwitcherEntry
* @property {Object[]} viewSwitcherEntry
+ * @property {Component} ControlPanel
+ * @property {Component} SearchPanel
+ * @property {Component} Banner
*/
/**
@@ -50,6 +56,9 @@ export function getDefaultConfig() {
},
viewSwitcherEntries: [],
views: [],
+ ControlPanel: ControlPanel,
+ SearchPanel: SearchPanel,
+ Banner: OnboardingBanner,
};
return config;
}
diff --git a/addons/web/static/tests/views/kanban_view_tests.js b/addons/web/static/tests/views/kanban_view_tests.js
index 18d1845957f..69336ad13bf 100644
--- a/addons/web/static/tests/views/kanban_view_tests.js
+++ b/addons/web/static/tests/views/kanban_view_tests.js
@@ -10633,4 +10633,31 @@ QUnit.module("Views", (hooks) => {
);
assert.verifySteps(["notification"]);
});
+
+ QUnit.test("renders banner_route", async (assert) => {
+ await makeView({
+ type: "kanban",
+ resModel: "partner",
+ serverData,
+ arch: `
+
+
+
+
+
+
+
+ `,
+ groupBy: ["bar"],
+ async mockRPC(route) {
+ if (route === "/mybody/isacage") {
+ assert.step(route);
+ return { html: `myBanner
` };
+ }
+ },
+ });
+
+ assert.verifySteps(["/mybody/isacage"]);
+ assert.containsOnce(target, ".setmybodyfree");
+ });
});
diff --git a/addons/web/static/tests/views/list_view_tests.js b/addons/web/static/tests/views/list_view_tests.js
index ae25d706407..8e9b06e8bc5 100644
--- a/addons/web/static/tests/views/list_view_tests.js
+++ b/addons/web/static/tests/views/list_view_tests.js
@@ -14130,4 +14130,25 @@ QUnit.module("Views", (hooks) => {
assert.containsNone(target, ".o_selected_row");
});
+
+ QUnit.test("renders banner_route", async (assert) => {
+ await makeView({
+ type: "list",
+ resModel: "foo",
+ serverData,
+ arch: `
+
+
+ `,
+ async mockRPC(route) {
+ if (route === "/mybody/isacage") {
+ assert.step(route);
+ return { html: `myBanner
` };
+ }
+ },
+ });
+
+ assert.verifySteps(["/mybody/isacage"]);
+ assert.containsOnce(target, ".setmybodyfree");
+ });
});