diff options
| author | Sébastien Theys <seb@odoo.com> | 2018-07-10 13:52:34 +0200 |
|---|---|---|
| committer | Sébastien Theys <seb@odoo.com> | 2018-07-17 11:50:35 +0200 |
| commit | 73d54999df1a20990b2f6d6a3e1007cebf8d8c82 (patch) | |
| tree | 01fa4a30d422414a24d1943b712e29140fd1cf87 /addons/web/static/src/js/fields/relational_fields.js | |
| parent | f241441433046c41e4f3edd05d5d69028da1f8a7 (diff) | |
[IMP] web: make X2Many Renderer more extensible
This allows a custom widget to cleanly override the Renderer of a X2Many.
PR #25209
Diffstat (limited to 'addons/web/static/src/js/fields/relational_fields.js')
| -rw-r--r-- | addons/web/static/src/js/fields/relational_fields.js | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js index 104d8f3bed8..c1c458d1935 100644 --- a/addons/web/static/src/js/fields/relational_fields.js +++ b/addons/web/static/src/js/fields/relational_fields.js @@ -843,6 +843,22 @@ var FieldX2Many = AbstractField.extend({ }); }, /** + * Computes the default renderer to use depending on the view type. + * We create this as a method so we can override it if we want to use + * another renderer instead (eg. section_and_note_one2many). + * + * @private + * @returns {Object} The renderer to use + */ + _getRenderer: function () { + if (this.view.arch.tag === 'tree') { + return ListRenderer; + } + if (this.view.arch.tag === 'kanban') { + return KanbanRenderer; + } + }, + /** * Instanciates or updates the adequate renderer. * * @override @@ -861,19 +877,22 @@ var FieldX2Many = AbstractField.extend({ } var arch = this.view.arch; var viewType; + var rendererParams = { + arch: arch, + }; + if (arch.tag === 'tree') { viewType = 'list'; this.currentColInvisibleFields = this._evalColumnInvisibleFields(); - this.renderer = new ListRenderer(this, this.value, { - arch: arch, + _.extend(rendererParams, { editable: this.mode === 'edit' && arch.attrs.editable, addCreateLine: !this.isReadonly && this.activeActions.create, addTrashIcon: !this.isReadonly && this.activeActions.delete, isMany2Many: this.isMany2Many, - viewType: viewType, columnInvisibleFields: this.currentColInvisibleFields, }); } + if (arch.tag === 'kanban') { viewType = 'kanban'; var record_options = { @@ -881,12 +900,17 @@ var FieldX2Many = AbstractField.extend({ deletable: false, read_only_mode: this.isReadonly, }; - this.renderer = new KanbanRenderer(this, this.value, { - arch: arch, + _.extend(rendererParams, { record_options: record_options, - viewType: viewType, }); } + + _.extend(rendererParams, { + viewType: viewType, + }); + var Renderer = this._getRenderer(); + this.renderer = new Renderer(this, this.value, rendererParams); + this.$el.addClass('o_field_x2many o_field_x2many_' + viewType); return this.renderer ? this.renderer.appendTo(this.$el) : this._super(); }, |
