From 59b96b0742fe8da31eecf896f7a6157811d49de5 Mon Sep 17 00:00:00 2001 From: Younn Olivier Date: Wed, 15 Dec 2021 18:07:40 +0100 Subject: [PATCH] [IMP] website: add client action to display current website in an iframe This commit adds a new client action, that will display the frontend website in an iframe, inside the backend. Besides that iframe will be instantiated the edition components (the snippets menu, or the translate menu). This allows for a better integration with the other odoo apps, an easier mobile edition. It also avoid reloading the edition components when navigating inside the website. See merge commit for more information. task-2687506 --- addons/website/__manifest__.py | 5 ++- .../website_preview/website_preview.js | 37 +++++++++++++++++++ .../website_preview/website_preview.scss | 11 ++++++ .../website_preview/website_preview.xml | 8 ++++ .../static/src/js/backend/dashboard.js | 2 +- .../static/src/services/website_service.js | 21 +++++++++++ addons/website/views/website_views.xml | 18 ++++++--- 7 files changed, 94 insertions(+), 8 deletions(-) create mode 100644 addons/website/static/src/client_actions/website_preview/website_preview.js create mode 100644 addons/website/static/src/client_actions/website_preview/website_preview.scss create mode 100644 addons/website/static/src/client_actions/website_preview/website_preview.xml create mode 100644 addons/website/static/src/services/website_service.js diff --git a/addons/website/__manifest__.py b/addons/website/__manifest__.py index 1a80ba97813..456a70bf346 100644 --- a/addons/website/__manifest__.py +++ b/addons/website/__manifest__.py @@ -169,6 +169,9 @@ 'website/static/src/js/widget_iframe.js', 'website/static/src/js/theme_preview_kanban.js', 'website/static/src/js/theme_preview_form.js', + 'website/static/src/client_actions/*/*.js', + 'website/static/src/client_actions/*/*.scss', + 'website/static/src/services/website_service.js', ], 'web.qunit_suite_tests': [ 'website/static/tests/dashboard_tests.js', @@ -239,7 +242,7 @@ 'website/static/src/xml/website.backend.xml', 'website/static/src/xml/website_widget.xml', 'website/static/src/xml/theme_preview.xml', - 'website/static/src/client_actions/configurator/configurator.xml', + 'website/static/src/client_actions/*/*.xml', ], 'website.test_bundle': [ '/web/static/lib/qweb/qweb2.js', 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 new file mode 100644 index 00000000000..d6f9c2889be --- /dev/null +++ b/addons/website/static/src/client_actions/website_preview/website_preview.js @@ -0,0 +1,37 @@ +/** @odoo-module **/ + +import { registry } from '@web/core/registry'; +import { useService } from '@web/core/utils/hooks'; + +const { Component, onWillStart } = owl; + +export class WebsitePreview extends Component { + setup() { + this.websiteService = useService('website'); + + onWillStart(async () => { + await this.websiteService.fetchWebsites(); + const encodedPath = encodeURIComponent(this.path); + this.initialUrl = `/website/force/${this.websiteId}?path=${encodedPath}`; + }); + } + + get websiteId() { + let websiteId = this.props.action.context.params && this.props.action.context.params.website_id; + if (!websiteId) { + websiteId = this.websiteService.websites[0].id; + } + return websiteId; + } + + get path() { + let path = this.props.action.context.params && this.props.action.context.params.path; + if (!path) { + path = '/'; + } + return path; + } +} +WebsitePreview.template = 'website.WebsitePreview'; + +registry.category('actions').add('website_preview', WebsitePreview); 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 new file mode 100644 index 00000000000..89b84d2f969 --- /dev/null +++ b/addons/website/static/src/client_actions/website_preview/website_preview.scss @@ -0,0 +1,11 @@ +.o_website_preview { + position: relative; + height: 100%; + + > iframe { + @include o-position-absolute(0, 0, 0, 0); + width: 100%; + height: 100%; + border: none; + } +} diff --git a/addons/website/static/src/client_actions/website_preview/website_preview.xml b/addons/website/static/src/client_actions/website_preview/website_preview.xml new file mode 100644 index 00000000000..e856f8453c9 --- /dev/null +++ b/addons/website/static/src/client_actions/website_preview/website_preview.xml @@ -0,0 +1,8 @@ + + + +
+