diff --git a/addons/web/static/src/legacy/js/views/abstract_controller.js b/addons/web/static/src/legacy/js/views/abstract_controller.js index 631fbdf11c0..75b4d967c16 100644 --- a/addons/web/static/src/legacy/js/views/abstract_controller.js +++ b/addons/web/static/src/legacy/js/views/abstract_controller.js @@ -280,6 +280,18 @@ var AbstractController = mvc.Controller.extend(ActionMixin, { this.renderer.giveFocus(); } }, + /** + * Hide an onboarding banner if present and visible + * @private + */ + _hideBanner: function () { + if (this._$banner.length) { + const $bannerElement = this._$banner.filter('.o_onboarding_container.collapse.show'); + if ($bannerElement.length) { + Collapse.getOrCreateInstance($bannerElement[0]).toggle(); + } + } + }, /** * This method is the way a view can notifies the outside world that * something has changed. The main use for this is to update the url, for @@ -524,6 +536,9 @@ var AbstractController = mvc.Controller.extend(ActionMixin, { additional_context: _.extend({}, data.context) }); } + if (data.oHideBanner) { + self._hideBanner(); + } }, /** * Called either from the control panel to focus the controller diff --git a/addons/web/static/src/legacy/js/views/pivot/pivot_controller.js b/addons/web/static/src/legacy/js/views/pivot/pivot_controller.js index 97cfcf2366d..7d2a4befd9e 100644 --- a/addons/web/static/src/legacy/js/views/pivot/pivot_controller.js +++ b/addons/web/static/src/legacy/js/views/pivot/pivot_controller.js @@ -93,7 +93,7 @@ const context = this._getRenderButtonContext(); this.$buttons = $(QWeb.render('PivotView.buttons', context)); this.$buttons.click(this._onButtonClick.bind(this)); - this.$buttons.find('button').tooltip(); + this.$buttons.find('button[title]').tooltip(); if ($node) { this.$buttons.appendTo($node); } diff --git a/addons/web/static/src/views/onboarding_banner.js b/addons/web/static/src/views/onboarding_banner.js index 31ba74e4691..75e505116ad 100644 --- a/addons/web/static/src/views/onboarding_banner.js +++ b/addons/web/static/src/views/onboarding_banner.js @@ -4,20 +4,32 @@ import { loadCSS, loadJS } from "@web/core/assets"; import { useService } from "@web/core/utils/hooks"; import { useActionLinks } from "@web/views/view_hook"; -const { Component, markup, onWillStart, xml } = owl; +const { Component, markup, onWillStart, useRef, xml } = owl; export class OnboardingBanner extends Component { setup() { this.rpc = useService("rpc"); this.user = useService("user"); + this.onboardingContainerRef = useRef("onboardingContainer"); const resModel = "searchModel" in this.env ? this.env.searchModel.resModel : undefined; - this.handleActionLinks = useActionLinks({ + this._handleActionLinks = useActionLinks({ resModel, reload: async () => { this.bannerHTML = await this.loadBanner(this.env.config.bannerRoute); this.render(); }, }); + this.handleActionLinks = (event) => { + if (event.target.dataset.oHideBanner) { + const collapseElement = this.onboardingContainerRef.el.querySelector( + ".o_onboarding_container.collapse.show" + ); + if (collapseElement) { + Collapse.getOrCreateInstance(collapseElement).toggle(); + } + } + this._handleActionLinks(event); + }; onWillStart(this.onWillStart); } @@ -47,5 +59,5 @@ export class OnboardingBanner extends Component { } } -OnboardingBanner.template = xml`
`; +OnboardingBanner.template = xml``; OnboardingBanner.props = {}; diff --git a/addons/web/static/tests/legacy/views/abstract_view_banner_tests.js b/addons/web/static/tests/legacy/views/abstract_view_banner_tests.js index ee3e890cbdf..da8eaacb412 100644 --- a/addons/web/static/tests/legacy/views/abstract_view_banner_tests.js +++ b/addons/web/static/tests/legacy/views/abstract_view_banner_tests.js @@ -43,12 +43,13 @@ QUnit.module('LegacyViews', { assert.expect(6); var banner_html =` -