diff --git a/addons/website/__manifest__.py b/addons/website/__manifest__.py index bb2d4fdbe32..7b9ef800dbe 100644 --- a/addons/website/__manifest__.py +++ b/addons/website/__manifest__.py @@ -161,10 +161,7 @@ 'website/static/src/scss/website.backend.scss', 'website/static/src/scss/website_visitor_views.scss', 'website/static/src/scss/website.theme_install.scss', - 'website/static/src/js/backend/button.js', - 'website/static/src/js/backend/dashboard.js', - 'website/static/src/js/backend/res_config_settings.js', - 'website/static/src/js/backend/view_hierarchy.js', + 'website/static/src/js/backend/**/*', 'website/static/src/js/widget_iframe.js', 'website/static/src/js/theme_preview_kanban.js', 'website/static/src/js/theme_preview_form.js', @@ -186,6 +183,7 @@ 'web.qunit_suite_tests': [ 'website/static/tests/dashboard_tests.js', 'website/static/tests/website_tests.js', + 'website/static/tests/redirect_field_tests.js', ], 'web.tests_assets': [ 'website/static/tests/website_service_mock.js', @@ -268,6 +266,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/js/backend/**/*', ], 'website.test_bundle': [ '/web/static/lib/qweb/qweb2.js', diff --git a/addons/website/static/src/js/backend/redirect_field.js b/addons/website/static/src/js/backend/redirect_field.js new file mode 100644 index 00000000000..7008946cbff --- /dev/null +++ b/addons/website/static/src/js/backend/redirect_field.js @@ -0,0 +1,24 @@ +/** @odoo-module **/ + +import { registry } from "@web/core/registry"; + +const { Component } = owl; + +class RedirectField extends Component { + get info() { + return this.props.value ? this.env._t("Published") : this.env._t("Unpublished"); + } + + onClick() { + this.env.onClickViewButton({ + clickParams: { + type: "object", + name: "open_website_url" + }, + record: this.props.record, + }); + } +} + +RedirectField.template = "website.RedirectField"; +registry.category("fields").add("website_redirect_button", RedirectField); diff --git a/addons/website/static/src/js/backend/redirect_field.xml b/addons/website/static/src/js/backend/redirect_field.xml new file mode 100644 index 00000000000..23b4e5cf1fb --- /dev/null +++ b/addons/website/static/src/js/backend/redirect_field.xml @@ -0,0 +1,16 @@ + + + + + + + + diff --git a/addons/website/static/tests/redirect_field_tests.js b/addons/website/static/tests/redirect_field_tests.js new file mode 100644 index 00000000000..2b0db99145c --- /dev/null +++ b/addons/website/static/tests/redirect_field_tests.js @@ -0,0 +1,90 @@ +/** @odoo-module **/ + +import { registry } from "@web/core/registry"; + +import { click, getFixture } from "@web/../tests/helpers/utils"; +import { makeView, setupViewRegistries } from "@web/../tests/views/helpers"; + +let serverData; +let target; + +QUnit.module("redirect_field", (hooks) => { + hooks.beforeEach(() => { + target = getFixture(); + serverData = { + models: { + appointment: { + fields: { + is_published: { + string: "Is published", + type: "boolean", + searchable: true, + trim: true, + }, + }, + records: [ + { + id: 1, + is_published: true, + }, + ], + }, + }, + }; + + setupViewRegistries(); + }); + + QUnit.test("redirect field in form view is green if value=true", async function (assert) { + await makeView({ + type: "form", + resModel: "appointment", + resId: 1, + serverData, + arch: ` +
+ +
+ +
+
+
`, + }); + assert.containsOnce(target, ".oe_stat_button .o_button_icon.text-success") + }); + + QUnit.test("clicking on redirect field works", async function (assert) { + registry.category("services").add( + "action", + { + start() { + return { + doActionButton(data) { + assert.step(data.type); + assert.step(data.name); + }, + }; + }, + }, + { force: true } + ); + + await makeView({ + type: "form", + resModel: "appointment", + resId: 1, + serverData, + arch: ` +
+ +
+ +
+
+
`, + }); + await click(target, ".oe_stat_button"); + + assert.verifySteps(['object', 'open_website_url']); + }); +});