[REF] calendar: Move renderer in its own file
This commit is contained in:
@@ -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
|
||||
|
||||
});
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user