From d2dd9a2f454deee234d7a2e12c3d8fff0538edd8 Mon Sep 17 00:00:00 2001 From: William Braeckman Date: Tue, 20 Sep 2022 11:45:36 +0000 Subject: [PATCH] [FIX] web: fix invalid popover for tags_list The `TagsList` component may be provided with a list of tags and a number of tags that should be visible. In the case where there are more tags then there are tags that should be visible a ball with the number of remaining records is added with a popover containing the names of the records. However the popover contained plain text resulting in `record1
record2` instead of marked up html. It will now use a tooltip template and more info. X-original-commit: baf9711407a01ec196bf7de191372056aa4cab6e Part-of: odoo/odoo#100764 --- .../views/fields/many2many_tags/tags_list.js | 9 +++++-- .../views/fields/many2many_tags/tags_list.xml | 8 ++++++- .../many2many_tags_avatar_field_tests.js | 24 ++++++++++++++----- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/addons/web/static/src/views/fields/many2many_tags/tags_list.js b/addons/web/static/src/views/fields/many2many_tags/tags_list.js index a0cb92f69ef..13197ed603a 100644 --- a/addons/web/static/src/views/fields/many2many_tags/tags_list.js +++ b/addons/web/static/src/views/fields/many2many_tags/tags_list.js @@ -15,8 +15,13 @@ export class TagsList extends Component { } return this.props.tags.slice(this.props.itemsVisible - 1); } - get tooltip() { - return this.otherTags.map((i) => i.text).join("
"); + get tooltipInfo() { + return JSON.stringify({ + tags: this.otherTags.map((tag) => ({ + text: tag.text, + id: tag.id, + })), + }); } } TagsList.template = "web.TagsList"; diff --git a/addons/web/static/src/views/fields/many2many_tags/tags_list.xml b/addons/web/static/src/views/fields/many2many_tags/tags_list.xml index 503e8d72e7f..ef9971ddee5 100644 --- a/addons/web/static/src/views/fields/many2many_tags/tags_list.xml +++ b/addons/web/static/src/views/fields/many2many_tags/tags_list.xml @@ -13,10 +13,16 @@ - + + + +
+ + + diff --git a/addons/web/static/tests/views/fields/many2many_tags_avatar_field_tests.js b/addons/web/static/tests/views/fields/many2many_tags_avatar_field_tests.js index 1a47022ec2d..00abfbaf44e 100644 --- a/addons/web/static/tests/views/fields/many2many_tags_avatar_field_tests.js +++ b/addons/web/static/tests/views/fields/many2many_tags_avatar_field_tests.js @@ -204,8 +204,14 @@ QUnit.module("Fields", (hooks) => { ".o_data_row:nth-child(2) .o_field_many2many_tags_avatar .o_m2m_avatar_empty" ); assert.strictEqual( - tag.dataset["tooltip"], - "record 6
record 7", + tag.dataset["tooltipTemplate"], + "web.TagsList.Tooltip", + "uses the proper tooltip template", + ); + const tooltipInfo = JSON.parse(tag.dataset["tooltipInfo"]); + assert.strictEqual( + tooltipInfo.tags.map(tag => tag.text).join(" "), + 'record 6 record 7', "shows a tooltip on hover" ); @@ -228,7 +234,7 @@ QUnit.module("Fields", (hooks) => { }); QUnit.test("widget many2many_tags_avatar in kanban view", async function (assert) { - assert.expect(12); + assert.expect(13); const records = []; for (let id = 5; id <= 15; id++) { @@ -355,9 +361,15 @@ QUnit.module("Fields", (hooks) => { ".o_kanban_record:nth-child(3) .o_field_many2many_tags_avatar .o_m2m_avatar_empty" ); assert.strictEqual( - tag.dataset["tooltip"], - "aaa
record 5", - "shows a tooltip on hover with the right text" + tag.dataset["tooltipTemplate"], + "web.TagsList.Tooltip", + "uses the proper tooltip template", + ); + const tooltipInfo = JSON.parse(tag.dataset["tooltipInfo"]); + assert.strictEqual( + tooltipInfo.tags.map(tag => tag.text).join(" "), + 'aaa record 5', + "shows a tooltip on hover" ); await click(