From bbc4de86d9a375d0f74f17f7f2bd158727113a9a Mon Sep 17 00:00:00 2001 From: "Julien Carion (juca)" Date: Thu, 21 Sep 2023 11:03:09 +0200 Subject: [PATCH] [IMP] web: list many2oneAvatar should not be a link MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit changes the canOpen prop of the many2oneAvatar field to be set to true only when in form view. The field will therefore stop being a link in readonly when outside of form view. closes odoo/odoo#136118 Signed-off-by: Michaƫl Mattiello (mcm) --- .../tests/web/fields/m2x_avatar_user_tests.js | 12 +++--- .../many2one_avatar/many2one_avatar_field.js | 8 +++- .../fields/many2one_avatar_field_tests.js | 37 ++++++++++++++----- 3 files changed, 40 insertions(+), 17 deletions(-) diff --git a/addons/mail/static/tests/web/fields/m2x_avatar_user_tests.js b/addons/mail/static/tests/web/fields/m2x_avatar_user_tests.js index c19bf2122ca..d31df0268e5 100644 --- a/addons/mail/static/tests/web/fields/m2x_avatar_user_tests.js +++ b/addons/mail/static/tests/web/fields/m2x_avatar_user_tests.js @@ -265,11 +265,11 @@ QUnit.test( views: [[false, "list"]], }); await contains( - ":nth-child(1 of .o_data_row) .o_field_many2one_avatar_user .o_form_uri span", + ":nth-child(1 of .o_data_row) .o_field_many2one_avatar_user span > span", { text: "Luigi" } ); await contains( - ":nth-child(2 of .o_data_row) .o_field_many2one_avatar_user .o_form_uri span", + ":nth-child(2 of .o_data_row) .o_field_many2one_avatar_user span > span", { text: "Mario" } ); // Select all @@ -284,11 +284,11 @@ QUnit.test( // Cancel await click(".o_dialog .modal-footer button:nth-child(2)"); await contains( - ":nth-child(1 of .o_data_row) .o_field_many2one_avatar_user .o_form_uri span", + ":nth-child(1 of .o_data_row) .o_field_many2one_avatar_user span > span", { text: "Luigi" } ); await contains( - ":nth-child(2 of .o_data_row) .o_field_many2one_avatar_user .o_form_uri span", + ":nth-child(2 of .o_data_row) .o_field_many2one_avatar_user span > span", { text: "Mario" } ); @@ -300,11 +300,11 @@ QUnit.test( await click(".o_dialog .modal-footer button:nth-child(1)"); await contains(".o_dialog", { count: 0 }); await contains( - ":nth-child(1 of .o_data_row) .o_field_many2one_avatar_user .o_form_uri span", + ":nth-child(1 of .o_data_row) .o_field_many2one_avatar_user span > span", { text: "Luigi" } ); await contains( - ":nth-child(2 of .o_data_row) .o_field_many2one_avatar_user .o_form_uri span", + ":nth-child(2 of .o_data_row) .o_field_many2one_avatar_user span > span", { text: "Luigi" } ); diff --git a/addons/web/static/src/views/fields/many2one_avatar/many2one_avatar_field.js b/addons/web/static/src/views/fields/many2one_avatar/many2one_avatar_field.js index 4d9f247d268..8cfdd50279d 100644 --- a/addons/web/static/src/views/fields/many2one_avatar/many2one_avatar_field.js +++ b/addons/web/static/src/views/fields/many2one_avatar/many2one_avatar_field.js @@ -32,7 +32,13 @@ export class Many2OneAvatarField extends Component { export const many2OneAvatarField = { ...many2OneField, component: Many2OneAvatarField, + extractProps(fieldInfo) { + const props = many2OneField.extractProps(...arguments); + props.canOpen = fieldInfo.viewType === "form"; + return props; + }, }; + export class Many2OneFieldPopover extends Many2OneField { static props = { ...Many2OneField.props, @@ -96,7 +102,7 @@ export const kanbanMany2OneAvatarField = { component: KanbanMany2OneAvatarField, additionalClasses: ["o_field_many2one_avatar_kanban"], extractProps(fieldInfo, dynamicInfo) { - const props = many2OneField.extractProps(...arguments); + const props = many2OneAvatarField.extractProps(...arguments); props.isEditable = !dynamicInfo.readonly; return props; }, diff --git a/addons/web/static/tests/views/fields/many2one_avatar_field_tests.js b/addons/web/static/tests/views/fields/many2one_avatar_field_tests.js index b8aaf405c60..755da186fc8 100644 --- a/addons/web/static/tests/views/fields/many2one_avatar_field_tests.js +++ b/addons/web/static/tests/views/fields/many2one_avatar_field_tests.js @@ -309,17 +309,34 @@ QUnit.module("Fields", (hooks) => { assert.verifySteps(["openRecord"]); }); - QUnit.test("readonly many2one_avatar should contain a link", async function (assert) { - await makeView({ - type: "form", - serverData, - resModel: "partner", - resId: 1, - arch: `
`, - }); + QUnit.test( + "readonly many2one_avatar in form view should contain a link", + async function (assert) { + await makeView({ + type: "form", + serverData, + resModel: "partner", + resId: 1, + arch: `
`, + }); - assert.containsOnce(target, "[name='user_id'] a"); - }); + assert.containsOnce(target, "[name='user_id'] a"); + } + ); + + QUnit.test( + "readonly many2one_avatar in list view should not contain a link", + async function (assert) { + await makeView({ + type: "list", + serverData, + resModel: "partner", + arch: ``, + }); + + assert.containsNone(target, "[name='user_id'] a"); + } + ); QUnit.test("cancelling create dialog should clear value in the field", async function (assert) { serverData.views = {