From 73d54999df1a20990b2f6d6a3e1007cebf8d8c82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Theys?= Date: Tue, 10 Jul 2018 13:52:34 +0200 Subject: [IMP] web: make X2Many Renderer more extensible This allows a custom widget to cleanly override the Renderer of a X2Many. PR #25209 --- .../web/static/src/js/fields/relational_fields.js | 36 ++++++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) (limited to 'addons/web/static/src/js/fields/relational_fields.js') 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 @@ -842,6 +842,22 @@ var FieldX2Many = AbstractField.extend({ }).column_invisible; }); }, + /** + * 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. * @@ -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(); }, -- cgit v1.2.3