summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorAlexandre Kühn <aku@odoo.com>2020-09-07 09:26:38 +0000
committerAlexandre Kühn <aku@odoo.com>2020-09-11 10:40:22 +0000
commit4a693c0233d3fbfdc991e2ccbfcbcd2d360ce788 (patch)
tree79d4b3124355f7fdf4cb0cf18578bba24b2aa344 /addons
parent170cd2a0217c8d172115dee32e1e0e5e0451fc7a (diff)
[FIX] im_livechat, mail, website_livechat: invite button in livechats
Task-2334724 closes odoo/odoo#57505 X-original-commit: 5316c91c27e48bfaa3ebf3fb97e35220fabc986e Signed-off-by: Sébastien Theys (seb) <seb@odoo.com> Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
Diffstat (limited to 'addons')
-rw-r--r--addons/im_livechat/static/src/components/discuss/discuss_tests.js26
-rw-r--r--addons/im_livechat/static/src/models/partner/partner.js23
-rw-r--r--addons/im_livechat/static/src/models/thread/thread.js12
-rw-r--r--addons/im_livechat/static/src/widgets/discuss/discuss.js25
-rw-r--r--addons/im_livechat/views/im_livechat_channel_templates.xml2
-rw-r--r--addons/mail/static/src/models/partner/partner.js8
-rw-r--r--addons/mail/static/src/widgets/discuss/discuss.js15
-rw-r--r--addons/website_livechat/models/mail_channel.py2
8 files changed, 100 insertions, 13 deletions
diff --git a/addons/im_livechat/static/src/components/discuss/discuss_tests.js b/addons/im_livechat/static/src/components/discuss/discuss_tests.js
index 166e4fd679f..c756f2dff93 100644
--- a/addons/im_livechat/static/src/components/discuss/discuss_tests.js
+++ b/addons/im_livechat/static/src/components/discuss/discuss_tests.js
@@ -411,6 +411,32 @@ QUnit.test('livechats with no messages are sorted by creation date in the sideba
);
});
+QUnit.test('invite button should be present on livechat', async function (assert) {
+ assert.expect(1);
+
+ this.data['mail.channel'].records.push(
+ {
+ anonymous_name: "Visitor 11",
+ channel_type: 'livechat',
+ id: 11,
+ livechat_operator_id: this.data.currentPartnerId,
+ members: [this.data.currentPartnerId, this.data.publicPartnerId],
+ },
+ );
+ await this.start({
+ discuss: {
+ params: {
+ default_active_id: 'mail.channel_11',
+ },
+ },
+ });
+ assert.containsOnce(
+ document.body,
+ '.o_widget_Discuss_controlPanelButtonInvite',
+ "Invite button should be visible in control panel when livechat is active thread"
+ );
+});
+
});
});
});
diff --git a/addons/im_livechat/static/src/models/partner/partner.js b/addons/im_livechat/static/src/models/partner/partner.js
new file mode 100644
index 00000000000..7392c8d6229
--- /dev/null
+++ b/addons/im_livechat/static/src/models/partner/partner.js
@@ -0,0 +1,23 @@
+odoo.define('im_livechat/static/src/models/partner/partner.js', function (require) {
+'use strict';
+
+const {
+ registerClassPatchModel,
+} = require('mail/static/src/model/model_core.js');
+
+let nextPublicId = -1;
+
+registerClassPatchModel('mail.partner', 'im_livechat/static/src/models/partner/partner.js', {
+
+ //----------------------------------------------------------------------
+ // Public
+ //----------------------------------------------------------------------
+
+ getNextPublicId() {
+ const id = nextPublicId;
+ nextPublicId -= 1;
+ return id;
+ },
+});
+
+});
diff --git a/addons/im_livechat/static/src/models/thread/thread.js b/addons/im_livechat/static/src/models/thread/thread.js
index 190a2088066..1ec06246ec7 100644
--- a/addons/im_livechat/static/src/models/thread/thread.js
+++ b/addons/im_livechat/static/src/models/thread/thread.js
@@ -53,9 +53,11 @@ registerClassPatchModel('mail.thread', 'im_livechat/static/src/models/thread/thr
)
);
data2.members.push(['link', partner]);
+ data2.correspondent = [['link', partner]];
} else {
const partnerData = this.env.models['mail.partner'].convertData(data.livechat_visitor);
data2.members.push(['insert', partnerData]);
+ data2.correspondent = [['insert', partnerData]];
}
}
return data2;
@@ -71,6 +73,16 @@ registerInstancePatchModel('mail.thread', 'im_livechat/static/src/models/thread/
/**
* @override
*/
+ _computeCorrespondent() {
+ if (this.channel_type === 'livechat') {
+ // livechat correspondent never change: always the public member.
+ return [];
+ }
+ return this._super();
+ },
+ /**
+ * @override
+ */
_computeDisplayName() {
if (this.channel_type === 'livechat' && this.correspondent) {
if (this.correspondent.country) {
diff --git a/addons/im_livechat/static/src/widgets/discuss/discuss.js b/addons/im_livechat/static/src/widgets/discuss/discuss.js
new file mode 100644
index 00000000000..37673669efa
--- /dev/null
+++ b/addons/im_livechat/static/src/widgets/discuss/discuss.js
@@ -0,0 +1,25 @@
+odoo.define('im_livechat/static/src/widgets/discuss/discuss.js', function (require) {
+'use strict';
+
+const Discuss = require('mail/static/src/widgets/discuss/discuss.js');
+
+Discuss.include({
+ //----------------------------------------------------------------------
+ // Private
+ //----------------------------------------------------------------------
+
+ /**
+ * @override
+ */
+ _shouldHaveInviteButton() {
+ if (
+ this.discuss.thread &&
+ this.discuss.thread.channel_type === 'livechat'
+ ) {
+ return true;
+ }
+ return this._super();
+ },
+});
+
+});
diff --git a/addons/im_livechat/views/im_livechat_channel_templates.xml b/addons/im_livechat/views/im_livechat_channel_templates.xml
index 045b9811701..59338e6dbc8 100644
--- a/addons/im_livechat/views/im_livechat_channel_templates.xml
+++ b/addons/im_livechat/views/im_livechat_channel_templates.xml
@@ -18,7 +18,9 @@
<script type="text/javascript" src="/im_livechat/static/src/components/thread_preview/thread_preview.js"></script>
<script type="text/javascript" src="/im_livechat/static/src/models/messaging_initializer/messaging_initializer.js"></script>
<script type="text/javascript" src="/im_livechat/static/src/models/messaging_notification_handler/messaging_notification_handler.js"></script>
+ <script type="text/javascript" src="/im_livechat/static/src/models/partner/partner.js"></script>
<script type="text/javascript" src="/im_livechat/static/src/models/thread/thread.js"></script>
+ <script type="text/javascript" src="/im_livechat/static/src/widgets/discuss/discuss.js"></script>
<link rel="stylesheet" type="text/scss" href="/im_livechat/static/src/bugfix/bugfix.scss"/>
<link rel="stylesheet" type="text/scss" href="/im_livechat/static/src/scss/im_livechat_history.scss"/>
diff --git a/addons/mail/static/src/models/partner/partner.js b/addons/mail/static/src/models/partner/partner.js
index 0b08451efcd..eb56720b862 100644
--- a/addons/mail/static/src/models/partner/partner.js
+++ b/addons/mail/static/src/models/partner/partner.js
@@ -8,8 +8,6 @@ const utils = require('web.utils');
function factory(dependencies) {
- let nextPublicId = -1;
-
class Partner extends dependencies['mail.model'] {
//----------------------------------------------------------------------
@@ -67,12 +65,6 @@ function factory(dependencies) {
return data2;
}
- static getNextPublicId() {
- const id = nextPublicId;
- nextPublicId -= 1;
- return id;
- }
-
/**
* Search for partners matching `keyword`.
*
diff --git a/addons/mail/static/src/widgets/discuss/discuss.js b/addons/mail/static/src/widgets/discuss/discuss.js
index 53ed2f73b00..ac1eea69bf0 100644
--- a/addons/mail/static/src/widgets/discuss/discuss.js
+++ b/addons/mail/static/src/widgets/discuss/discuss.js
@@ -164,6 +164,16 @@ const DiscussWidget = AbstractAction.extend({
},
/**
* @private
+ * @returns {boolean}
+ */
+ _shouldHaveInviteButton() {
+ return (
+ this.discuss.thread &&
+ this.discuss.thread.channel_type === 'channel'
+ );
+ },
+ /**
+ * @private
*/
_showRainbowMan() {
this.trigger_up('show_effect', {
@@ -176,10 +186,7 @@ const DiscussWidget = AbstractAction.extend({
*/
_updateControlPanel() {
// Invite
- if (
- this.discuss.thread &&
- this.discuss.thread.channel_type === 'channel'
- ) {
+ if (this._shouldHaveInviteButton()) {
this.$buttons.find('.o_invite').removeClass('o_hidden');
} else {
this.$buttons.find('.o_invite').addClass('o_hidden');
diff --git a/addons/website_livechat/models/mail_channel.py b/addons/website_livechat/models/mail_channel.py
index fd3189b8400..f82559491ab 100644
--- a/addons/website_livechat/models/mail_channel.py
+++ b/addons/website_livechat/models/mail_channel.py
@@ -36,7 +36,7 @@ class MailChannel(models.Model):
'name': visitor.display_name,
'country_code': visitor.country_id.code.lower() if visitor.country_id else False,
'is_connected': visitor.is_connected,
- 'history': self._get_visitor_history(visitor),
+ 'history': self.sudo()._get_visitor_history(visitor),
'website': visitor.website_id.name,
'lang': visitor.lang_id.name,
'partner_id': visitor.partner_id.id,