[FIX] im_livechat, mail, website_livechat: invite button in livechats
Task-2334724 closes odoo/odoo#57511 X-original-commit: 5316c91c27e48bfaa3ebf3fb97e35220fabc986e Signed-off-by: Sébastien Theys (seb) <seb@odoo.com> Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
This commit is contained in:
@@ -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"
|
||||
);
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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;
|
||||
},
|
||||
});
|
||||
|
||||
});
|
||||
@@ -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;
|
||||
@@ -68,6 +70,16 @@ registerInstancePatchModel('mail.thread', 'im_livechat/static/src/models/thread/
|
||||
// Private
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* @override
|
||||
*/
|
||||
_computeCorrespondent() {
|
||||
if (this.channel_type === 'livechat') {
|
||||
// livechat correspondent never change: always the public member.
|
||||
return [];
|
||||
}
|
||||
return this._super();
|
||||
},
|
||||
/**
|
||||
* @override
|
||||
*/
|
||||
|
||||
@@ -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();
|
||||
},
|
||||
});
|
||||
|
||||
});
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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`.
|
||||
*
|
||||
|
||||
@@ -162,6 +162,16 @@ const DiscussWidget = AbstractAction.extend({
|
||||
active_id: this.discuss.activeId,
|
||||
});
|
||||
},
|
||||
/**
|
||||
* @private
|
||||
* @returns {boolean}
|
||||
*/
|
||||
_shouldHaveInviteButton() {
|
||||
return (
|
||||
this.discuss.thread &&
|
||||
this.discuss.thread.channel_type === 'channel'
|
||||
);
|
||||
},
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
@@ -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');
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user