From 9434969d5dc06aadcdbbfc600514a0bdb5635ea2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Wed, 27 Jul 2022 11:55:48 +0000 Subject: [PATCH] [REF] website: reimplement redirect field in owl The redirect field in website does not work properly in the new views. With this commit, we just reimplement it to make it work with the new code. closes odoo/odoo#96865 Related: odoo/enterprise#30178 Signed-off-by: Aaron Bohy (aab) --- addons/website/__manifest__.py | 7 +- .../static/src/js/backend/redirect_field.js | 24 +++++ .../static/src/js/backend/redirect_field.xml | 16 ++++ .../static/tests/redirect_field_tests.js | 90 +++++++++++++++++++ 4 files changed, 133 insertions(+), 4 deletions(-) create mode 100644 addons/website/static/src/js/backend/redirect_field.js create mode 100644 addons/website/static/src/js/backend/redirect_field.xml create mode 100644 addons/website/static/tests/redirect_field_tests.js 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']); + }); +});