-
Custom
-
![]()
+
+
+
-
-
-
-
![]()
-
+
+
-
+
+
+
+
+
+
+
+
diff --git a/addons/website/static/src/components/navbar/navbar.js b/addons/website/static/src/components/navbar/navbar.js
index 9b01c18099e..c489fb8d504 100644
--- a/addons/website/static/src/components/navbar/navbar.js
+++ b/addons/website/static/src/components/navbar/navbar.js
@@ -5,6 +5,7 @@ import { useService, useBus } from '@web/core/utils/hooks';
import { registry } from "@web/core/registry";
import { patch } from 'web.utils';
import { EditMenuDialog } from '@website/components/dialog/edit_menu';
+import { OptimizeSEODialog } from '@website/components/dialog/seo';
const websiteSystrayRegistry = registry.category('website_systray');
@@ -26,14 +27,21 @@ patch(NavBar.prototype, 'website_navbar', {
useBus(websiteSystrayRegistry, 'CONTENT-UPDATED', () => this.render(true));
this.websiteDialogMenus = {
- 'website.menu_edit_menu': EditMenuDialog,
+ 'website.menu_edit_menu': {
+ component: EditMenuDialog,
+ isDisplayed: () => !!this.websiteService.currentWebsite,
+ },
+ 'website.menu_optimize_seo': {
+ component: OptimizeSEODialog,
+ isDisplayed: () => this.websiteService.currentWebsite && !!this.websiteService.currentWebsite.metadata.mainObject,
+ },
};
},
filterWebsiteMenus(sections) {
const filteredSections = [];
for (const section of sections) {
- if (!this.websiteDialogMenus[section.xmlid]) {
+ if (!this.websiteDialogMenus[section.xmlid] || this.websiteDialogMenus[section.xmlid].isDisplayed()) {
let subSections = [];
if (section.childrenTree.length) {
subSections = this.filterWebsiteMenus(section.childrenTree);
@@ -63,7 +71,7 @@ patch(NavBar.prototype, 'website_navbar', {
*/
get currentAppSections() {
const currentAppSections = this._super();
- if (this.currentApp && this.currentApp.xmlid === 'website.menu_website_configuration' && !this.websiteService.currentWebsite) {
+ if (this.currentApp && this.currentApp.xmlid === 'website.menu_website_configuration') {
return this.filterWebsiteMenus(currentAppSections).filter(section => section.childrenTree.length);
}
return currentAppSections;
@@ -74,7 +82,7 @@ patch(NavBar.prototype, 'website_navbar', {
*/
onNavBarDropdownItemSelection(menu) {
if (this.websiteDialogMenus[menu.xmlid]) {
- return this.dialogService.add(this.websiteDialogMenus[menu.xmlid]);
+ return this.dialogService.add(this.websiteDialogMenus[menu.xmlid].component);
}
return this._super(menu);
}
diff --git a/addons/website/static/src/services/website_service.js b/addons/website/static/src/services/website_service.js
index 1170d8664af..89a043118c2 100644
--- a/addons/website/static/src/services/website_service.js
+++ b/addons/website/static/src/services/website_service.js
@@ -26,6 +26,7 @@ export const websiteService = {
let currentWebsiteId;
let currentMetadata = {};
let fullscreen;
+ let pageDocument;
const context = reactive({
showNewContentModal: false,
});
@@ -51,10 +52,6 @@ export const websiteService = {
set currentWebsiteId(id) {
setCurrentWebsiteId(id);
},
- set currentMetadata(metadata) {
- currentMetadata = metadata;
- websiteSystrayRegistry.trigger('CONTENT-UPDATED');
- },
get currentWebsite() {
const currentWebsite = websites.find(w => w.id === currentWebsiteId);
if (currentWebsite) {
@@ -68,6 +65,26 @@ export const websiteService = {
get context() {
return context;
},
+ set pageDocument(document) {
+ pageDocument = document;
+ if (!document) {
+ return;
+ }
+ const { mainObject, seoObject, isPublished, canPublish, editableInBackend } = document.documentElement.dataset;
+ currentMetadata = {
+ path: document.location.href,
+ mainObject: unslugHtmlDataObject(mainObject),
+ seoObject: unslugHtmlDataObject(seoObject),
+ isPublished: isPublished === 'True',
+ canPublish: canPublish === 'True',
+ editableInBackend: editableInBackend === 'True',
+ title: document.title,
+ };
+ websiteSystrayRegistry.trigger('CONTENT-UPDATED');
+ },
+ get pageDocument() {
+ return pageDocument;
+ },
goToWebsite({ websiteId = currentWebsiteId || websites[0].id, path = '/' } = {}) {
action.doAction('website.website_preview', {
clearBreadcrumbs: true,
diff --git a/addons/website/views/website_navbar_templates.xml b/addons/website/views/website_navbar_templates.xml
index 6d86ee81e1f..6f3904bb5ae 100644
--- a/addons/website/views/website_navbar_templates.xml
+++ b/addons/website/views/website_navbar_templates.xml
@@ -64,10 +64,6 @@