From 3751379f1e9a4c215fb6eb898b4ccc67659b9ace Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Tue, 10 May 2022 21:51:50 +0700 Subject: initial commit 2 --- .../static/src/js/section_fields_backend.js | 89 ++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 addons/resource/static/src/js/section_fields_backend.js (limited to 'addons/resource/static/src/js/section_fields_backend.js') diff --git a/addons/resource/static/src/js/section_fields_backend.js b/addons/resource/static/src/js/section_fields_backend.js new file mode 100644 index 00000000..e96757c5 --- /dev/null +++ b/addons/resource/static/src/js/section_fields_backend.js @@ -0,0 +1,89 @@ + +odoo.define('resource.section_backend', function (require) { +// The goal of this file is to contain JS hacks related to allowing +// section on resource calendar. + +"use strict"; +var FieldOne2Many = require('web.relational_fields').FieldOne2Many; +var fieldRegistry = require('web.field_registry'); +var ListRenderer = require('web.ListRenderer'); + +var SectionListRenderer = ListRenderer.extend({ + /** + * We want section to take the whole line (except handle and trash) + * to look better and to hide the unnecessary fields. + * + * @override + */ + _renderBodyCell: function (record, node, index, options) { + var $cell = this._super.apply(this, arguments); + + var isSection = record.data.display_type === 'line_section'; + + if (isSection) { + if (node.attrs.widget === "handle") { + return $cell; + } else if (node.attrs.name === "name") { + var nbrColumns = this._getNumberOfCols(); + if (this.handleField) { + nbrColumns--; + } + if (this.addTrashIcon) { + nbrColumns--; + } + $cell.attr('colspan', nbrColumns); + } else { + return $cell.addClass('o_hidden'); + } + } + + return $cell; + }, + /** + * We add the o_is_{display_type} class to allow custom behaviour both in JS and CSS. + * + * @override + */ + _renderRow: function (record, index) { + var $row = this._super.apply(this, arguments); + + if (record.data.display_type) { + $row.addClass('o_is_' + record.data.display_type); + } + + return $row; + }, + /** + * We want to add .o_section_list_view on the table to have stronger CSS. + * + * @override + * @private + */ + _renderView: function () { + var self = this; + return this._super.apply(this, arguments).then(function () { + self.$('.o_list_table').addClass('o_section_list_view'); + }); + }, +}); + +// We create a custom widget because this is the cleanest way to do it: +// to be sure this custom code will only impact selected fields having the widget +// and not applied to any other existing ListRenderer. +var SectionFieldOne2Many = FieldOne2Many.extend({ + /** + * We want to use our custom renderer for the list. + * + * @override + */ + _getRenderer: function () { + if (this.view.arch.tag === 'tree') { + return SectionListRenderer; + } + return this._super.apply(this, arguments); + }, +}); + +fieldRegistry.add('section_one2many', SectionFieldOne2Many); + +}); -- cgit v1.2.3