From 39aef65f37a8ae969527b31a680eb27fddbc5710 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20Lef=C3=A8vre?= Date: Mon, 6 Apr 2020 18:06:19 +0200 Subject: [PATCH] [REF] calendar: Move renderer in its own file --- .../static/src/js/calendar_renderer.js | 108 ++++++++++++++++++ .../calendar/static/src/js/calendar_view.js | 103 +---------------- addons/calendar/views/calendar_templates.xml | 1 + 3 files changed, 111 insertions(+), 101 deletions(-) create mode 100644 addons/calendar/static/src/js/calendar_renderer.js diff --git a/addons/calendar/static/src/js/calendar_renderer.js b/addons/calendar/static/src/js/calendar_renderer.js new file mode 100644 index 00000000000..464d6db09cf --- /dev/null +++ b/addons/calendar/static/src/js/calendar_renderer.js @@ -0,0 +1,108 @@ +odoo.define('calendar.CalendarRenderer', function (require) { +"use strict"; + +const CalendarRenderer = require('web.CalendarRenderer'); +const CalendarPopover = require('web.CalendarPopover'); +const session = require('web.session'); + + +const AttendeeCalendarPopover = CalendarPopover.extend({ + template: 'Calendar.attendee.status.popover', + events: _.extend({}, CalendarPopover.prototype.events, { + 'click .o-calendar-attendee-status .dropdown-item': '_onClickAttendeeStatus' + }), + /** + * @constructor + */ + init: function () { + var self = this; + this._super.apply(this, arguments); + // Show status dropdown if user is in attendees list + if (this.isCurrentPartnerAttendee()) { + this.statusColors = {accepted: 'text-success', declined: 'text-danger', tentative: 'text-muted', needsAction: 'text-dark'}; + this.statusInfo = {}; + _.each(this.fields.attendee_status.selection, function (selection) { + self.statusInfo[selection[0]] = {text: selection[1], color: self.statusColors[selection[0]]}; + }); + this.selectedStatusInfo = this.statusInfo[this.event.extendedProps.record.attendee_status]; + } + }, + + //-------------------------------------------------------------------------- + // Public + //-------------------------------------------------------------------------- + + /** + * @return {boolean} + */ + isCurrentPartnerAttendee() { + return this.event.extendedProps.record.partner_ids.includes(session.partner_id); + }, + /** + * @override + * @return {boolean} + */ + isEventDeletable() { + return this._super() && (this._isEventPrivate() ? this.isCurrentPartnerAttendee() : true); + }, + /** + * @override + * @return {boolean} + */ + isEventDetailsVisible() { + return this._isEventPrivate() ? this.isCurrentPartnerAttendee() : this._super(); + }, + /** + * @override + * @return {boolean} + */ + isEventEditable() { + return this._isEventPrivate() ? this.isCurrentPartnerAttendee() : this._super(); + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * @private + * @return {boolean} + */ + _isEventPrivate() { + return this.event.extendedProps.record.privacy === 'private'; + }, + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * @private + * @param {MouseEvent} ev + */ + _onClickAttendeeStatus: function (ev) { + ev.preventDefault(); + var self = this; + var selectedStatus = $(ev.currentTarget).attr('data-action'); + this._rpc({ + model: 'calendar.event', + method: 'change_attendee_status', + args: [this.event.id, selectedStatus], + }).then(function () { + self.event.extendedProps.record.attendee_status = selectedStatus; // FIXEME: Maybe we have to reload view + self.$('.o-calendar-attendee-status-text').text(self.statusInfo[selectedStatus].text); + self.$('.o-calendar-attendee-status-icon').removeClass(_.values(self.statusColors).join(' ')).addClass(self.statusInfo[selectedStatus].color); + }); + }, +}); + + +const AttendeeCalendarRenderer = CalendarRenderer.extend({ + config: _.extend({}, CalendarRenderer.prototype.config, { + CalendarPopover: AttendeeCalendarPopover, + }), +}); + +return AttendeeCalendarRenderer + +}); diff --git a/addons/calendar/static/src/js/calendar_view.js b/addons/calendar/static/src/js/calendar_view.js index 427c0608ea3..4454dc0e1ef 100644 --- a/addons/calendar/static/src/js/calendar_view.js +++ b/addons/calendar/static/src/js/calendar_view.js @@ -1,114 +1,15 @@ odoo.define('calendar.CalendarView', function (require) { "use strict"; -var CalendarPopover = require('web.CalendarPopover'); -var CalendarRenderer = require('web.CalendarRenderer'); var CalendarController = require('calendar.CalendarController'); var CalendarModel = require('calendar.CalendarModel'); +const CalendarRenderer = require('calendar.CalendarRenderer'); var CalendarView = require('web.CalendarView'); -const session = require('web.session'); var viewRegistry = require('web.view_registry'); -var AttendeeCalendarPopover = CalendarPopover.extend({ - template: 'Calendar.attendee.status.popover', - events: _.extend({}, CalendarPopover.prototype.events, { - 'click .o-calendar-attendee-status .dropdown-item': '_onClickAttendeeStatus' - }), - /** - * @constructor - */ - init: function () { - var self = this; - this._super.apply(this, arguments); - // Show status dropdown if user is in attendees list - if (this.isCurrentPartnerAttendee()) { - this.statusColors = {accepted: 'text-success', declined: 'text-danger', tentative: 'text-muted', needsAction: 'text-dark'}; - this.statusInfo = {}; - _.each(this.fields.attendee_status.selection, function (selection) { - self.statusInfo[selection[0]] = {text: selection[1], color: self.statusColors[selection[0]]}; - }); - this.selectedStatusInfo = this.statusInfo[this.event.extendedProps.record.attendee_status]; - } - }, - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - /** - * @return {boolean} - */ - isCurrentPartnerAttendee() { - return this.event.extendedProps.record.partner_ids.includes(session.partner_id); - }, - /** - * @override - * @return {boolean} - */ - isEventDeletable() { - return this._super() && (this._isEventPrivate() ? this.isCurrentPartnerAttendee() : true); - }, - /** - * @override - * @return {boolean} - */ - isEventDetailsVisible() { - return this._isEventPrivate() ? this.isCurrentPartnerAttendee() : this._super(); - }, - /** - * @override - * @return {boolean} - */ - isEventEditable() { - return this._isEventPrivate() ? this.isCurrentPartnerAttendee() : this._super(); - }, - - //-------------------------------------------------------------------------- - // Private - //-------------------------------------------------------------------------- - - /** - * @private - * @return {boolean} - */ - _isEventPrivate() { - return this.event.extendedProps.record.privacy === 'private'; - }, - - //-------------------------------------------------------------------------- - // Handlers - //-------------------------------------------------------------------------- - - /** - * @private - * @param {MouseEvent} ev - */ - _onClickAttendeeStatus: function (ev) { - ev.preventDefault(); - var self = this; - var selectedStatus = $(ev.currentTarget).attr('data-action'); - this._rpc({ - model: 'calendar.event', - method: 'change_attendee_status', - args: [this.event.id, selectedStatus], - }).then(function () { - self.event.extendedProps.record.attendee_status = selectedStatus; // FIXEME: Maybe we have to reload view - self.$('.o-calendar-attendee-status-text').text(self.statusInfo[selectedStatus].text); - self.$('.o-calendar-attendee-status-icon').removeClass(_.values(self.statusColors).join(' ')).addClass(self.statusInfo[selectedStatus].color); - }); - }, -}); - -var AttendeeCalendarRenderer = CalendarRenderer.extend({ - config: _.extend({}, CalendarRenderer.prototype.config, { - CalendarPopover: AttendeeCalendarPopover, - }), -}); - - var AttendeeCalendarView = CalendarView.extend({ config: _.extend({}, CalendarView.prototype.config, { - Renderer: AttendeeCalendarRenderer, + Renderer: CalendarRenderer, Controller: CalendarController, Model: CalendarModel, }), diff --git a/addons/calendar/views/calendar_templates.xml b/addons/calendar/views/calendar_templates.xml index af492c9b7ea..813b33f2b3d 100644 --- a/addons/calendar/views/calendar_templates.xml +++ b/addons/calendar/views/calendar_templates.xml @@ -4,6 +4,7 @@ +