diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/website_event_meet/static/src/js | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/website_event_meet/static/src/js')
3 files changed, 239 insertions, 0 deletions
diff --git a/addons/website_event_meet/static/src/js/customize_options.js b/addons/website_event_meet/static/src/js/customize_options.js new file mode 100644 index 00000000..4d8ccbd3 --- /dev/null +++ b/addons/website_event_meet/static/src/js/customize_options.js @@ -0,0 +1,69 @@ +odoo.define('website_event_meet.set_customize_options', function (require) { +"use strict"; + +let EventSpecificOptions = require('website_event.set_customize_options').EventSpecificOptions; + +EventSpecificOptions.include({ + xmlDependencies: (EventSpecificOptions.prototype.xmlDependencies || []) + .concat([ + '/website_event_meet/static/src/xml/customize_options.xml', + ]), + + events: _.extend({}, EventSpecificOptions.prototype.events, { + 'change #allow-room-creation': '_onAllowRoomCreationChange', + }), + + start: function () { + this.$allowRoomCreationInput = this.$('#allow-room-creation'); + this._super.apply(this, arguments); + }, + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + _onAllowRoomCreationChange: function () { + let checkboxValue = this.$allowRoomCreationInput.is(':checked'); + this._toggleAllowRoomCreation(checkboxValue); + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + _getCheckboxFields: function () { + let fields = this._super(); + fields = _.union(fields, ['meeting_room_allow_creation']); + return fields; + }, + + _getCheckboxFieldMatch: function (checkboxField) { + if (checkboxField === 'meeting_room_allow_creation') { + return this.$allowRoomCreationInput; + } + return this._super(checkboxField); + }, + + _initCheckboxCallback: function (rpcData) { + this._super(rpcData); + if (rpcData[0]['meeting_room_allow_creation']) { + let submenuInput = this._getCheckboxFieldMatch('meeting_room_allow_creation'); + submenuInput.attr('checked', 'checked'); + } + }, + + _toggleAllowRoomCreation: async function (val) { + await this._rpc({ + model: this.modelName, + method: 'write', + args: [[this.eventId], { + meeting_room_allow_creation: val + }], + }); + + this._reloadEventPage(); + }, + +}); + +}); diff --git a/addons/website_event_meet/static/src/js/website_event_create_meeting_room_button.js b/addons/website_event_meet/static/src/js/website_event_create_meeting_room_button.js new file mode 100644 index 00000000..c64537a5 --- /dev/null +++ b/addons/website_event_meet/static/src/js/website_event_create_meeting_room_button.js @@ -0,0 +1,59 @@ +odoo.define('website_event_meet.website_event_create_room_button', function (require) { +'use strict'; + +const publicWidget = require('web.public.widget'); +const core = require('web.core'); +const QWeb = core.qweb; + +publicWidget.registry.websiteEventCreateMeetingRoom = publicWidget.Widget.extend({ + selector: '.o_wevent_create_room_button', + xmlDependencies: ['/website_event_meet/static/src/xml/website_event_meeting_room.xml'], + events: { + 'click': '_onClickCreate', + }, + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + _onClickCreate: async function () { + if (!this.$createModal) { + const langs = await this._rpc({ + route: "/event/active_langs", + }); + + this.$createModal = $(QWeb.render( + 'event_meet_create_room_modal', + { + csrf_token: odoo.csrf_token, + eventId: this.$el.data("eventId"), + defaultLangCode: this.$el.data("defaultLangCode"), + langs: langs, + } + )); + + this.$createModal.appendTo(this.$el.parentNode); + } + + this.$createModal.modal('show'); + }, + + //-------------------------------------------------------------------------- + // Override + //-------------------------------------------------------------------------- + + /** + * Remove the create modal from the DOM, to avoid issue when editing the template + * with the website editor. + * + * @override + */ + destroy: function () { + $('.o_wevent_create_meeting_room_modal').remove(); + this._super.apply(this, arguments); + }, +}); + +return publicWidget.registry.websiteEventMeetingRoom; + +}); diff --git a/addons/website_event_meet/static/src/js/website_event_meeting_room.js b/addons/website_event_meet/static/src/js/website_event_meeting_room.js new file mode 100644 index 00000000..774a186e --- /dev/null +++ b/addons/website_event_meet/static/src/js/website_event_meeting_room.js @@ -0,0 +1,111 @@ +odoo.define('website_event_meet.website_event_meet_meeting_room', function (require) { +'use strict'; + +const publicWidget = require('web.public.widget'); +const core = require('web.core'); +const Dialog = require('web.Dialog'); +const _t = core._t; + +publicWidget.registry.websiteEventMeetingRoom = publicWidget.Widget.extend({ + selector: '.o_wevent_meeting_room_card', + xmlDependencies: ['/website_event_meet/static/src/xml/website_event_meeting_room.xml'], + events: { + 'click .o_wevent_meeting_room_delete': '_onDeleteClick', + 'click .o_wevent_meeting_room_duplicate': '_onDuplicateClick', + 'click .o_wevent_meeting_room_is_pinned': '_onPinClick', + }, + + start: function () { + this._super.apply(this, arguments); + this.meetingRoomId = parseInt(this.$el.data('meeting-room-id')); + }, + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * Delete the meeting room. + * + * @private + */ + _onDeleteClick: async function (event) { + event.preventDefault(); + event.stopPropagation(); + + Dialog.confirm( + this, + _t("Are you sure you want to close this room ?"), + { + confirm_callback: async () => { + await this._rpc({ + model: 'event.meeting.room', + method: 'write', + args: [this.meetingRoomId, {is_published: false}], + context: this.context, + }); + + // remove the element so we do not need to refresh the page + this.$el.remove(); + } + }, + ); + }, + + /** + * Duplicate the room. + * + * @private + */ + _onDuplicateClick: function (event) { + event.preventDefault(); + event.stopPropagation(); + Dialog.confirm( + this, + _t("Are you sure you want to duplicate this room ?"), + { + confirm_callback: async () => { + await this._rpc({ + model: 'event.meeting.room', + method: 'copy', + args: [this.meetingRoomId], + context: this.context, + }); + + window.location.reload(); + } + }, + ); + }, + + /** + * Pin/unpin the room. + * + * @private + */ + _onPinClick: async function (event) { + event.preventDefault(); + event.stopPropagation(); + + const pinnedButtonClass = "o_wevent_meeting_room_pinned"; + const isPinned = event.currentTarget.classList.contains(pinnedButtonClass); + + await this._rpc({ + model: 'event.meeting.room', + method: 'write', + args: [this.meetingRoomId, {is_pinned: !isPinned}], + context: this.context, + }); + + // TDE FIXME: addclass ? + if (isPinned) { + event.currentTarget.classList.remove(pinnedButtonClass); + } else { + event.currentTarget.classList.add(pinnedButtonClass); + } + } +}); + +return publicWidget.registry.websiteEventMeetingRoom; + +}); |
