summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/fields/relational_fields.js
diff options
context:
space:
mode:
authorSébastien Theys <seb@odoo.com>2018-07-10 13:52:34 +0200
committerSébastien Theys <seb@odoo.com>2018-07-17 11:50:35 +0200
commit73d54999df1a20990b2f6d6a3e1007cebf8d8c82 (patch)
tree01fa4a30d422414a24d1943b712e29140fd1cf87 /addons/web/static/src/js/fields/relational_fields.js
parentf241441433046c41e4f3edd05d5d69028da1f8a7 (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.js36
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();
},