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 @@ + + + +
+