[REF] calendar: Move renderer in its own file

This commit is contained in:
Lucas Lefèvre
2020-04-09 10:59:34 +02:00
parent 1a9be3a869
commit 39aef65f37
3 changed files with 111 additions and 101 deletions
@@ -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
});
+2 -101
View File
@@ -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,
}),
@@ -4,6 +4,7 @@
<xpath expr="." position="inside">
<link rel="stylesheet" type="text/scss" href="/calendar/static/src/scss/calendar.scss"/>
<script type="text/javascript" src="/calendar/static/src/js/base_calendar.js"></script>
<script type="text/javascript" src="/calendar/static/src/js/calendar_renderer.js"></script>
<script type="text/javascript" src="/calendar/static/src/js/calendar_controller.js"></script>
<script type="text/javascript" src="/calendar/static/src/js/calendar_model.js"></script>
<script type="text/javascript" src="/calendar/static/src/js/calendar_view.js"></script>