diff --git a/addons/test_website_modules/static/tests/tours/configurator_flow.js b/addons/test_website_modules/static/tests/tours/configurator_flow.js
index 49ed9d9ef46..65707c04652 100644
--- a/addons/test_website_modules/static/tests/tours/configurator_flow.js
+++ b/addons/test_website_modules/static/tests/tours/configurator_flow.js
@@ -1,7 +1,6 @@
/** @odoo-module **/
import { registry } from "@web/core/registry";
-import wTourUtils from "@website/js/tours/tour_utils";
registry.category("web_tour.tours").add('configurator_flow', {
test: true,
@@ -72,12 +71,11 @@ registry.category("web_tour.tours").add('configurator_flow', {
trigger: '.o_website_loader_container',
run: function () {}, // it's a check
}, {
- content: "Wait untill the configurator is finished",
- trigger: '#oe_snippets.o_loaded',
+ content: "Wait until the configurator is finished",
+ trigger: ".o_website_preview[data-view-xmlid='website.homepage']",
timeout: 30000,
- },
- ...wTourUtils.clickOnSave(),
- {
+ isCheck: true,
+ }, {
content: "check menu and footer links are correct",
trigger: 'body:not(.editor_enable)', // edit mode left
run: function () {
diff --git a/addons/website/models/ir_module_module.py b/addons/website/models/ir_module_module.py
index 8bf2c5f86ea..2ac7b3935ce 100644
--- a/addons/website/models/ir_module_module.py
+++ b/addons/website/models/ir_module_module.py
@@ -404,8 +404,8 @@ class IrModuleModule(models.Model):
if active_todo:
result = active_todo.action_launch()
else:
- result = website.button_go_website(mode_edit=True)
- if result.get('tag') == 'website_preview' and result.get('context', {}).get('params', {}).get('enable_editor'):
+ result = website.button_go_website()
+ if result.get('tag') == 'website_preview' and result.get('context', {}).get('params'):
result['context']['params']['with_loader'] = True
return result
diff --git a/addons/website/static/src/client_actions/configurator/configurator.js b/addons/website/static/src/client_actions/configurator/configurator.js
index e2beaa6737e..e426de9e331 100644
--- a/addons/website/static/src/client_actions/configurator/configurator.js
+++ b/addons/website/static/src/client_actions/configurator/configurator.js
@@ -388,7 +388,7 @@ class ApplyConfiguratorScreen extends Component {
// Here the website service goToWebsite method is not used because
// the web client needs to be reloaded after the new modules have
// been installed.
- window.location.replace(`/web#action=website.website_preview&website_id=${encodeURIComponent(resp.website_id)}&enable_editor=1`);
+ window.location.replace(`/web#action=website.website_preview&website_id=${encodeURIComponent(resp.website_id)}`);
}
}
}
diff --git a/addons/website/static/src/client_actions/website_preview/website_preview.js b/addons/website/static/src/client_actions/website_preview/website_preview.js
index 7205a7dc508..0ac11509606 100644
--- a/addons/website/static/src/client_actions/website_preview/website_preview.js
+++ b/addons/website/static/src/client_actions/website_preview/website_preview.js
@@ -353,6 +353,10 @@ export class WebsitePreview extends Component {
this.websiteService.context.showAceEditor = false;
this.lastHiddenPageURL = undefined;
}
+ if (this.props.action.context.params?.with_loader) {
+ this.websiteService.hideLoader();
+ this.props.action.context.params.with_loader = false;
+ }
this.iframe.el.contentWindow.addEventListener('beforeunload', this._onPageUnload.bind(this));
this._replaceBrowserUrl();
this.iframe.el.contentWindow.addEventListener('hashchange', this._replaceBrowserUrl.bind(this));
diff --git a/addons/website/static/src/client_actions/website_preview/website_preview.scss b/addons/website/static/src/client_actions/website_preview/website_preview.scss
index a034827b836..f0389e212c4 100644
--- a/addons/website/static/src/client_actions/website_preview/website_preview.scss
+++ b/addons/website/static/src/client_actions/website_preview/website_preview.scss
@@ -11,6 +11,7 @@
.o_website_preview {
position: relative;
+ isolation: isolate;
height: 100%;
transition: margin-right ease 400ms;
diff --git a/addons/website/static/src/components/editor/editor.js b/addons/website/static/src/components/editor/editor.js
index 6468b203bf4..5b99457a5c7 100644
--- a/addons/website/static/src/components/editor/editor.js
+++ b/addons/website/static/src/components/editor/editor.js
@@ -86,7 +86,6 @@ export class WebsiteEditorComponent extends Component {
}
this.wysiwygOptions.invalidateSnippetCache = false;
this.websiteService.unblockPreview();
- this.websiteService.hideLoader();
}
/**
* Prepares the editor for reload. Copies the widget element tree
diff --git a/addons/website/static/src/components/navbar/navbar.js b/addons/website/static/src/components/navbar/navbar.js
index 296e071e27d..c7676f59cca 100644
--- a/addons/website/static/src/components/navbar/navbar.js
+++ b/addons/website/static/src/components/navbar/navbar.js
@@ -4,9 +4,11 @@ import { NavBar } from '@web/webclient/navbar/navbar';
import { useService, useBus } from '@web/core/utils/hooks';
import { registry } from "@web/core/registry";
import { patch } from "@web/core/utils/patch";
+import { UserMenu } from "@web/webclient/user_menu/user_menu";
import { useEffect } from "@odoo/owl";
const websiteSystrayRegistry = registry.category('website_systray');
+websiteSystrayRegistry.add("UserMenu", { Component: UserMenu }, { sequence: 14 });
patch(NavBar.prototype, {
setup() {
diff --git a/addons/website/static/src/js/tours/tour_utils.js b/addons/website/static/src/js/tours/tour_utils.js
index 4d2c3a35ad3..919f405cec3 100644
--- a/addons/website/static/src/js/tours/tour_utils.js
+++ b/addons/website/static/src/js/tours/tour_utils.js
@@ -160,13 +160,14 @@ function clickOnElement(elementName, selector) {
*/
function clickOnEditAndWaitEditMode(position = "bottom") {
return [{
- content: _t("Click Edit to start designing your homepage."),
+ content: markup(_t("Click Edit to start designing your homepage.")),
trigger: ".o_menu_systray .o_edit_website_container a",
position: position,
}, {
content: "Check that we are in edit mode",
trigger: ".o_website_preview.editor_enable.editor_has_snippets",
- run: () => null, // it's a check
+ auto: true, // Checking step only for automated tests
+ isCheck: true,
}];
}
@@ -357,15 +358,16 @@ function registerThemeHomepageTour(name, steps) {
}
return registerWebsitePreviewTour(name, {
url: '/',
- edition: true,
- sequence: 1010,
+ sequence: 50,
saveAs: "homepage",
},
- () =>
- prepend_trigger(
+ () => [
+ ...clickOnEditAndWaitEditMode(),
+ ...prepend_trigger(
steps().concat(clickOnSave()),
- ".o_website_preview[data-view-xmlid='website.homepage'] "
- ));
+ ".o_website_preview[data-view-xmlid='website.homepage'] "
+ ),
+ ]);
}
function registerBackendAndFrontendTour(name, options, steps) {
diff --git a/addons/website/static/tests/tours/automatic_editor.js b/addons/website/static/tests/tours/automatic_editor.js
index 0a86c9f0ca5..8ddf948df14 100644
--- a/addons/website/static/tests/tours/automatic_editor.js
+++ b/addons/website/static/tests/tours/automatic_editor.js
@@ -80,10 +80,10 @@ wTourUtils.registerWebsitePreviewTour('automatic_editor_on_new_website', {
trigger: 'button[name="button_choose_theme"]'
},
{
- content: "Check that the editor is loaded",
- trigger: 'iframe body.editor_enable',
+ content: "Check that the homepage is loaded",
+ trigger: ".o_website_preview[data-view-xmlid='website.homepage']",
+ extra_trigger: ".o_menu_systray .o_user_menu",
timeout: 30000,
- run: () => null, // it's a check
+ isCheck: true,
},
- ...wTourUtils.clickOnSave(),
]);
diff --git a/addons/website/static/tests/tours/configurator_translation.js b/addons/website/static/tests/tours/configurator_translation.js
index 6f08fe4edd1..e28065b9e3b 100644
--- a/addons/website/static/tests/tours/configurator_translation.js
+++ b/addons/website/static/tests/tours/configurator_translation.js
@@ -1,6 +1,7 @@
/** @odoo-module */
import { registry } from "@web/core/registry";
+import wTourUtils from "@website/js/tours/tour_utils";
registry.category("web_tour.tours").add('configurator_translation', {
test: true,
@@ -57,10 +58,13 @@ registry.category("web_tour.tours").add('configurator_translation', {
trigger: '.o_website_loader_container',
run: function () {}, // it's a check
}, {
- content: "Wait untill the configurator is finished",
- trigger: '#oe_snippets.o_loaded',
+ content: "Wait until the configurator is finished",
+ trigger: ".o_website_preview[data-view-xmlid='website.homepage']",
timeout: 30000,
- }, {
+ isCheck: true,
+ },
+ ...wTourUtils.clickOnEditAndWaitEditMode(),
+ {
// Check the content of the save button to make sure the website is in
// Parseltongue. (The editor should be in the website's default language,
// which should be parseltongue in this test.)
diff --git a/addons/website_sale/static/tests/tours/website_sale_remove_product_image.js b/addons/website_sale/static/tests/tours/website_sale_remove_product_image.js
index 736655dd066..376c1a1082c 100644
--- a/addons/website_sale/static/tests/tours/website_sale_remove_product_image.js
+++ b/addons/website_sale/static/tests/tours/website_sale_remove_product_image.js
@@ -13,7 +13,7 @@ const clickOnImgAndWaitForLoad = [
run: () => null,
},
];
-const enterEditModeOfTestProduct = [
+const enterEditModeOfTestProduct = () => [
{
content: "Click on the product anchor",
trigger: "iframe a:contains('Test Remove Image')",
@@ -39,7 +39,7 @@ wTourUtils.registerWebsitePreviewTour("add_and_remove_main_product_image_no_vari
url: "/shop?search=Test Remove Image",
test: true,
}, () => [
- ...enterEditModeOfTestProduct,
+ ...enterEditModeOfTestProduct(),
{
content: "Double click on the product image",
trigger: "iframe #o-carousel-product img[alt='Test Remove Image']",
@@ -60,7 +60,7 @@ wTourUtils.registerWebsitePreviewTour("remove_main_product_image_with_variant",
url: "/shop?search=Test Remove Image",
test: true,
}, () => [
- ...enterEditModeOfTestProduct,
+ ...enterEditModeOfTestProduct(),
...clickOnImgAndWaitForLoad,
...wTourUtils.clickOnSave(),
...wTourUtils.clickOnEditAndWaitEditMode(),