diff options
| author | Aaron Bohy <aab@odoo.com> | 2020-04-29 07:21:38 +0000 |
|---|---|---|
| committer | Aaron Bohy <aab@odoo.com> | 2020-05-05 10:05:12 +0000 |
| commit | df4693e7ffe8082335355b9a7c573d1038547f89 (patch) | |
| tree | d611e954c8b1961107f5e644545d6429348c106d /addons/web/static/src/js | |
| parent | 4f8860e5038711c0da5b26584c4b72663908ddbc (diff) | |
[IMP] web: add Many2OneAvatar field widget
In readonly, this widget displays the image of the related record
next to its display_name. In edit, it behaves exactly like the
regular many2one.
Part of task 2195254
Diffstat (limited to 'addons/web/static/src/js')
| -rw-r--r-- | addons/web/static/src/js/fields/field_registry.js | 1 | ||||
| -rw-r--r-- | addons/web/static/src/js/fields/relational_fields.js | 41 |
2 files changed, 41 insertions, 1 deletions
diff --git a/addons/web/static/src/js/fields/field_registry.js b/addons/web/static/src/js/fields/field_registry.js index 3cadf6cf6fa..925b405051e 100644 --- a/addons/web/static/src/js/fields/field_registry.js +++ b/addons/web/static/src/js/fields/field_registry.js @@ -84,6 +84,7 @@ registry .add('many2one_barcode', relational_fields.Many2oneBarcode) .add('list.many2one', relational_fields.ListFieldMany2One) .add('kanban.many2one', relational_fields.KanbanFieldMany2One) + .add('many2one_avatar', relational_fields.Many2OneAvatar) .add('many2many', relational_fields.FieldMany2Many) .add('many2many_binary', relational_fields.FieldMany2ManyBinaryMultiFiles) .add('many2many_tags', relational_fields.FieldMany2ManyTags) diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js index 72476d74c92..b5b6d7252e5 100644 --- a/addons/web/static/src/js/fields/relational_fields.js +++ b/addons/web/static/src/js/fields/relational_fields.js @@ -959,6 +959,44 @@ var KanbanFieldMany2One = AbstractField.extend({ }, }); +/** + * Widget Many2OneAvatar is only supported on many2one fields pointing to a + * model which inherits from 'image.mixin'. In readonly, it displays the + * record's image next to the display_name. In edit, it behaves exactly like a + * regular many2one widget. + */ +const Many2OneAvatar = FieldMany2One.extend({ + _template: 'web.Many2OneAvatar', + + init() { + this._super.apply(this, arguments); + if (this.mode === 'readonly') { + this.template = null; + this.tagName = 'div'; + this.className = 'o_field_many2one_avatar'; + // disable the redirection to the related record on click, in readonly + this.noOpen = true; + } + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * @override + */ + _renderReadonly() { + this.$el.empty(); + if (this.value) { + this.$el.html(qweb.render(this._template, { + url: `/web/image/${this.field.relation}/${this.value.res_id}/image_128`, + value: this.m2o_value, + })); + } + }, +}); + //------------------------------------------------------------------------------ // X2Many widgets //------------------------------------------------------------------------------ @@ -3308,8 +3346,9 @@ return { Many2oneBarcode: Many2oneBarcode, KanbanFieldMany2One: KanbanFieldMany2One, ListFieldMany2One: ListFieldMany2One, + Many2OneAvatar: Many2OneAvatar, - FieldX2Many : FieldX2Many, + FieldX2Many: FieldX2Many, FieldOne2Many: FieldOne2Many, FieldMany2Many: FieldMany2Many, |
