summaryrefslogtreecommitdiff
path: root/addons/website_event_meet/static/src/js
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/website_event_meet/static/src/js
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/website_event_meet/static/src/js')
-rw-r--r--addons/website_event_meet/static/src/js/customize_options.js69
-rw-r--r--addons/website_event_meet/static/src/js/website_event_create_meeting_room_button.js59
-rw-r--r--addons/website_event_meet/static/src/js/website_event_meeting_room.js111
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;
+
+});