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"); + }); });