From c343318f93ffec998b954a79f81e0791a1314b54 Mon Sep 17 00:00:00 2001 From: Bruno Boi Date: Wed, 24 Aug 2022 15:03:29 +0000 Subject: [PATCH] [FIX] web: keydown traceback on empty m2m_tags(_avatar)_field - Before this commit On an empty m2m_tags(_avatar)_field, triggering a keydown event yields to a traceback due to an owl issue. This will be fixed in owl later. - After this commit The 't-on-keydown' attribute on TagsList component has been moved into the tags themselves. closes odoo/odoo#98840 Signed-off-by: Samuel Degueldre --- .../views/fields/many2many_tags/many2many_tags_field.js | 4 +++- .../views/fields/many2many_tags/many2many_tags_field.xml | 2 +- .../static/src/views/fields/many2many_tags/tags_list.xml | 2 +- .../many2many_tags_avatar/many2many_tags_avatar_field.js | 9 ++++----- .../many2many_tags_avatar_field.xml | 2 +- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/addons/web/static/src/views/fields/many2many_tags/many2many_tags_field.js b/addons/web/static/src/views/fields/many2many_tags/many2many_tags_field.js index 5251c07a4d8..8fab6d0daa4 100644 --- a/addons/web/static/src/views/fields/many2many_tags/many2many_tags_field.js +++ b/addons/web/static/src/views/fields/many2many_tags/many2many_tags_field.js @@ -88,10 +88,12 @@ export class Many2ManyTagsField extends Component { get tags() { return this.props.value.records.map((record) => ({ id: record.id, // datapoint_X + resId: record.resId, text: record.data.display_name, colorIndex: record.data[this.props.colorField], onClick: (ev) => this.onBadgeClick(ev, record), onDelete: !this.props.readonly ? () => this.deleteTag(record.id) : undefined, + onKeydown: this.onTagKeydown.bind(this), })); } @@ -230,7 +232,7 @@ export class Many2ManyTagsField extends Component { ev.stopPropagation(); } - onTagsKeydown(ev) { + onTagKeydown(ev) { if (this.props.readonly) { return; } diff --git a/addons/web/static/src/views/fields/many2many_tags/many2many_tags_field.xml b/addons/web/static/src/views/fields/many2many_tags/many2many_tags_field.xml index 8ffdb031c0a..7f72881b91d 100644 --- a/addons/web/static/src/views/fields/many2many_tags/many2many_tags_field.xml +++ b/addons/web/static/src/views/fields/many2many_tags/many2many_tags_field.xml @@ -6,7 +6,7 @@ class="o_field_tags d-inline-flex flex-wrap mw-100" t-att-class="{'o_tags_input o_input': !props.readonly}" > - +
- +
diff --git a/addons/web/static/src/views/fields/many2many_tags_avatar/many2many_tags_avatar_field.js b/addons/web/static/src/views/fields/many2many_tags_avatar/many2many_tags_avatar_field.js index 568de73a6e1..2bee32186a8 100644 --- a/addons/web/static/src/views/fields/many2many_tags_avatar/many2many_tags_avatar_field.js +++ b/addons/web/static/src/views/fields/many2many_tags_avatar/many2many_tags_avatar_field.js @@ -7,11 +7,10 @@ import { TagsList } from "../many2many_tags/tags_list"; export class Many2ManyTagsAvatarField extends Many2ManyTagsField { get tags() { - return this.props.value.records.map((record) => ({ - id: record.id, // datapoint_X - text: record.data.display_name, - img: `/web/image/${this.props.relation}/${record.resId}/avatar_128`, - onDelete: !this.props.readonly ? () => this.deleteTag(record.id) : undefined, + return super.tags.map((tag) => ({ + ...tag, + img: `/web/image/${this.props.relation}/${tag.resId}/avatar_128`, + onDelete: !this.props.readonly ? () => this.deleteTag(tag.id) : undefined, })); } } diff --git a/addons/web/static/src/views/fields/many2many_tags_avatar/many2many_tags_avatar_field.xml b/addons/web/static/src/views/fields/many2many_tags_avatar/many2many_tags_avatar_field.xml index d8b6cf8df0d..514b60ed2eb 100644 --- a/addons/web/static/src/views/fields/many2many_tags_avatar/many2many_tags_avatar_field.xml +++ b/addons/web/static/src/views/fields/many2many_tags_avatar/many2many_tags_avatar_field.xml @@ -6,7 +6,7 @@ class="o_field_tags d-inline-flex flex-wrap mw-100" t-att-class="{'o_tags_input o_input': !props.readonly}" > - +