summaryrefslogtreecommitdiff
path: root/addons/mail/static/src/widgets/discuss_invite_partner_dialog
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/mail/static/src/widgets/discuss_invite_partner_dialog
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/mail/static/src/widgets/discuss_invite_partner_dialog')
-rw-r--r--addons/mail/static/src/widgets/discuss_invite_partner_dialog/discuss_invite_partner_dialog.js124
-rw-r--r--addons/mail/static/src/widgets/discuss_invite_partner_dialog/discuss_invite_partner_dialog.xml13
2 files changed, 137 insertions, 0 deletions
diff --git a/addons/mail/static/src/widgets/discuss_invite_partner_dialog/discuss_invite_partner_dialog.js b/addons/mail/static/src/widgets/discuss_invite_partner_dialog/discuss_invite_partner_dialog.js
new file mode 100644
index 00000000..6d9a051b
--- /dev/null
+++ b/addons/mail/static/src/widgets/discuss_invite_partner_dialog/discuss_invite_partner_dialog.js
@@ -0,0 +1,124 @@
+odoo.define('mail/static/src/widgets/discuss_invite_partner_dialog/discuss_invite_partner_dialog.js', function (require) {
+'use strict';
+
+const core = require('web.core');
+const Dialog = require('web.Dialog');
+
+const _lt = core._lt;
+const QWeb = core.qweb;
+
+/**
+ * Widget : Invite People to Channel Dialog
+ *
+ * Popup containing a 'many2many_tags' custom input to select multiple partners.
+ * Searches user according to the input, and triggers event when selection is
+ * validated.
+ */
+const PartnerInviteDialog = Dialog.extend({
+ dialog_title: _lt("Invite people"),
+ template: 'mail.widgets.DiscussInvitePartnerDialog',
+ /**
+ * @override {web.Dialog}
+ * @param {mail/static/src/widgets/discuss/discuss.js} parent
+ * @param {Object} param1
+ * @param {string} param1.activeThreadLocalId
+ * @param {Object} param1.messagingEnv
+ * @param {Object} param1.messagingEnv.store
+ */
+ init(parent, { activeThreadLocalId, messagingEnv }) {
+ const env = messagingEnv;
+ const channel = env.models['mail.thread'].get(activeThreadLocalId);
+ this.channelId = channel.id;
+ this.env = env;
+ this._super(parent, {
+ title: _.str.sprintf(this.env._t("Invite people to #%s"), owl.utils.escape(channel.displayName)),
+ size: 'medium',
+ buttons: [{
+ text: this.env._t("Invite"),
+ close: true,
+ classes: 'btn-primary',
+ click: ev => this._invite(ev),
+ }],
+ });
+ },
+ /**
+ * @override {web.Dialog}
+ * @returns {Promise}
+ */
+ start() {
+ this.$input = this.$('.o_input');
+ this.$input.select2({
+ width: '100%',
+ allowClear: true,
+ multiple: true,
+ formatResult: item => {
+ let status;
+ // TODO FIXME fix this, why do we even have an old widget here
+ if (item.id === 'odoobot') {
+ status = 'bot';
+ } else {
+ const partner = this.env.models['mail.partner'].findFromIdentifyingData({
+ id: item.id,
+ });
+ status = partner.im_status;
+ }
+ const $status = QWeb.render('mail.widgets.UserStatus', { status });
+ return $('<span>').text(item.text).prepend($status);
+ },
+ query: query => {
+ this.env.models['mail.partner'].imSearch({
+ callback: partners => {
+ let results = partners.map(partner => {
+ return {
+ id: partner.id,
+ label: partner.nameOrDisplayName,
+ text: partner.nameOrDisplayName,
+ value: partner.nameOrDisplayName,
+ };
+ });
+ results = _.sortBy(results, 'label');
+ query.callback({ results });
+ },
+ keyword: query.term,
+ limit: 20,
+ });
+ }
+ });
+ return this._super(...arguments);
+ },
+
+ //--------------------------------------------------------------------------
+ // Private
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ */
+ async _invite() {
+ const data = this.$input.select2('data');
+ if (data.length === 0) {
+ return;
+ }
+ await this._rpc({
+ model: 'mail.channel',
+ method: 'channel_invite',
+ args: [this.channelId],
+ kwargs: {
+ partner_ids: _.pluck(data, 'id')
+ },
+ });
+ const names = _.escape(_.pluck(data, 'text').join(', '));
+ const notification = _.str.sprintf(
+ this.env._t("You added <b>%s</b> to the conversation."),
+ names
+ );
+ this.env.services['notification'].notify({
+ message: notification,
+ type: 'warning',
+ });
+ },
+});
+
+return PartnerInviteDialog;
+
+});
diff --git a/addons/mail/static/src/widgets/discuss_invite_partner_dialog/discuss_invite_partner_dialog.xml b/addons/mail/static/src/widgets/discuss_invite_partner_dialog/discuss_invite_partner_dialog.xml
new file mode 100644
index 00000000..82553476
--- /dev/null
+++ b/addons/mail/static/src/widgets/discuss_invite_partner_dialog/discuss_invite_partner_dialog.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<templates xml:space="preserve">
+
+ <!--
+ @param {mail/static/src/widgets/discuss_invite_partner_dialog/discuss_invite_partner_dialog.js} widget
+ -->
+ <t t-name="mail.widgets.DiscussInvitePartnerDialog">
+ <div>
+ <input class="o_dialog o_input o_invite_partner" type="text"/>
+ </div>
+ </t>
+
+</templates>