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/mail/static/src/widgets/discuss_invite_partner_dialog | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/mail/static/src/widgets/discuss_invite_partner_dialog')
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> |
