From b19a1eaaf4f5626d4371e744a7ba3a166675690e Mon Sep 17 00:00:00 2001 From: Younn Olivier Date: Tue, 21 Jun 2022 16:41:46 +0200 Subject: [PATCH] [IMP] website, website_event: add edit event menu dropdown This commit adds a new menu item in the "Site" menu section. This "Edit Event Menu" item is only shown when a [data-content_menu_id] element is displayed within the iframe (such data attribute is added on the event menus). The contentMenuId is taken from the currentWebsite.metadata to keep data taken from the iframe's document centralized in the service. The spec is different from the previous implementation, that was prompting a dialog to select the menu to edit, before prompting the dialog to edit the menu. Here we have two different dropwdown items. See merge commit for more information. task-2687506 --- .../static/src/services/website_service.js | 2 ++ addons/website_event/__manifest__.py | 1 + .../static/src/js/components/navbar/navbar.js | 23 +++++++++++++++++++ addons/website_event/views/event_menus.xml | 6 +++++ 4 files changed, 32 insertions(+) create mode 100644 addons/website_event/static/src/js/components/navbar/navbar.js diff --git a/addons/website/static/src/services/website_service.js b/addons/website/static/src/services/website_service.js index 4d57e8544a9..ad505daea11 100644 --- a/addons/website/static/src/services/website_service.js +++ b/addons/website/static/src/services/website_service.js @@ -93,6 +93,7 @@ export const websiteService = { currentMetadata = {}; } else { const { mainObject, seoObject, isPublished, canPublish, editableInBackend, translatable, viewXmlid } = document.documentElement.dataset; + const contentMenuEl = document.querySelector('[data-content_menu_id]'); currentMetadata = { path: document.location.href, mainObject: unslugHtmlDataObject(mainObject), @@ -102,6 +103,7 @@ export const websiteService = { editableInBackend: editableInBackend === 'True', title: document.title, translatable: !!translatable, + contentMenuId: contentMenuEl && contentMenuEl.dataset.content_menu_id, // TODO: Find a better way to figure out if // a page is editable or not. For now, we use // the editable selector because it's the common diff --git a/addons/website_event/__manifest__.py b/addons/website_event/__manifest__.py index d39b254da22..b7c2ea21f63 100644 --- a/addons/website_event/__manifest__.py +++ b/addons/website_event/__manifest__.py @@ -65,6 +65,7 @@ ], 'website.assets_editor': [ 'website_event/static/src/js/systray_items/*.js', + 'website_event/static/src/js/components/navbar/navbar.js', ], }, 'license': 'LGPL-3', diff --git a/addons/website_event/static/src/js/components/navbar/navbar.js b/addons/website_event/static/src/js/components/navbar/navbar.js new file mode 100644 index 00000000000..6d400f9a8d5 --- /dev/null +++ b/addons/website_event/static/src/js/components/navbar/navbar.js @@ -0,0 +1,23 @@ +/** @odoo-module */ + +import { patch } from 'web.utils'; +import { NavBar } from '@web/webclient/navbar/navbar'; +import { EditMenuDialog } from '@website/components/dialog/edit_menu'; + +const { onWillStart } = owl; + +patch(NavBar.prototype, 'website_events_navbar', { + setup() { + this._super(); + + onWillStart(() => { + this.websiteEditingMenus['website_event.menu_edit_menu'] = { + Component: EditMenuDialog, + isDisplayed: () => this.websiteService.currentWebsite && this.websiteService.currentWebsite.metadata.contentMenuId, + getProps: () => ({ + rootID: parseInt(this.websiteService.currentWebsite.metadata.contentMenuId, 10), + }), + }; + }); + }, +}); diff --git a/addons/website_event/views/event_menus.xml b/addons/website_event/views/event_menus.xml index 623a223679b..8fe3cd4fc92 100644 --- a/addons/website_event/views/event_menus.xml +++ b/addons/website_event/views/event_menus.xml @@ -8,4 +8,10 @@ groups="base.group_no_one" sequence="99"/> + +