[FIX] mail: only show suggested partners once
In the chatter composer, suggested partners were shown more than necessary. 1. Create a new partner; 2. Open the chatter composer to send a message (the new partner is suggested as a recipient); 3. Re-open the chatter composer => the partner is still suggested, but it is already a follower now! Task-Id 2050102 closes odoo/odoo#35604 Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com> Co-authored-by: jbm-odoo <jbm@odoo.com>
This commit is contained in:
committed by
Alexandre Kühn
co-authored by
jbm-odoo
parent
59f838d5b1
commit
14bb91e9ae
@@ -31,6 +31,7 @@ var Chatter = Widget.extend({
|
||||
discard_record_changes: '_onDiscardRecordChanges',
|
||||
reload_attachment_box: '_onReloadAttachmentBox',
|
||||
reload_mail_fields: '_onReloadMailFields',
|
||||
reset_suggested_partners: '_onResetSuggestedPartners',
|
||||
},
|
||||
events: {
|
||||
'click .o_chatter_button_new_message': '_onOpenComposerMessage',
|
||||
@@ -68,6 +69,7 @@ var Chatter = Widget.extend({
|
||||
// suggestions as well once fetched
|
||||
this._mentionPartnerSuggestions = this.call('mail_service', 'getMentionPartnerSuggestions');
|
||||
this._mentionSuggestions = this._mentionPartnerSuggestions;
|
||||
this._suggestedPartnersProm = undefined;
|
||||
|
||||
if (mailFields.mail_activity) {
|
||||
this.fields.activity = new Activity(this, mailFields.mail_activity, record, options);
|
||||
@@ -406,6 +408,12 @@ var Chatter = Widget.extend({
|
||||
}
|
||||
}).then(always).guardedCatch(always);
|
||||
},
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
_resetSuggestedPartners() {
|
||||
this._suggestedPartnersProm = undefined;
|
||||
},
|
||||
/**
|
||||
* @private
|
||||
* @param {Object} record
|
||||
@@ -422,9 +430,9 @@ var Chatter = Widget.extend({
|
||||
default_res_id: record.res_id || false,
|
||||
default_model: record.model || false,
|
||||
};
|
||||
// reset the suggested_partners_def to ensure a reload of the
|
||||
// reset the _suggestedPartnersProm to ensure a reload of the
|
||||
// suggested partners when opening the composer on another record
|
||||
this.suggested_partners_def = undefined;
|
||||
this._resetSuggestedPartners();
|
||||
}
|
||||
this.record = record;
|
||||
this.recordName = record.data.display_name;
|
||||
@@ -475,6 +483,7 @@ var Chatter = Widget.extend({
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Handlers
|
||||
//--------------------------------------------------------------------------
|
||||
@@ -537,8 +546,8 @@ var Chatter = Widget.extend({
|
||||
},
|
||||
_onOpenComposerMessage: function () {
|
||||
var self = this;
|
||||
if (!this.suggested_partners_def) {
|
||||
this.suggested_partners_def = new Promise(function (resolve, reject) {
|
||||
if (!this._suggestedPartnersProm) {
|
||||
this._suggestedPartnersProm = new Promise(function (resolve, reject) {
|
||||
self._rpc({
|
||||
route: '/mail/get_suggested_recipients',
|
||||
params: {
|
||||
@@ -546,7 +555,7 @@ var Chatter = Widget.extend({
|
||||
res_ids: [self.context.default_res_id],
|
||||
},
|
||||
}).then(function (result) {
|
||||
if (!self.suggested_partners_def) {
|
||||
if (!self._suggestedPartnersProm) {
|
||||
return; // widget has been reset (e.g. we just switched to another record)
|
||||
}
|
||||
var suggested_partners = [];
|
||||
@@ -566,7 +575,7 @@ var Chatter = Widget.extend({
|
||||
});
|
||||
});
|
||||
}
|
||||
this.suggested_partners_def.then(function (suggested_partners) {
|
||||
this._suggestedPartnersProm.then(function (suggested_partners) {
|
||||
self._openComposer({ isLog: false, suggested_partners: suggested_partners });
|
||||
});
|
||||
},
|
||||
@@ -610,6 +619,14 @@ var Chatter = Widget.extend({
|
||||
keepChanges: true,
|
||||
});
|
||||
},
|
||||
/**
|
||||
* @private
|
||||
* @param {OdooEvent} ev
|
||||
*/
|
||||
_onResetSuggestedPartners(ev) {
|
||||
ev.stopPropagation();
|
||||
this._resetSuggestedPartners();
|
||||
},
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
|
||||
@@ -224,6 +224,9 @@ var ChatterComposer = BasicComposer.extend({
|
||||
message.context = _.defaults({}, message.context, {
|
||||
mail_post_autofollow: true,
|
||||
});
|
||||
if (partnerIDs.length) {
|
||||
self.trigger_up('reset_suggested_partners');
|
||||
}
|
||||
resolve(message);
|
||||
});
|
||||
} else {
|
||||
|
||||
@@ -3074,6 +3074,82 @@ QUnit.test('chatter: mention prefetched partners (followers & employees)', async
|
||||
form.destroy();
|
||||
});
|
||||
|
||||
QUnit.test('chatter: display suggested partners only once', async function (assert) {
|
||||
assert.expect(3);
|
||||
|
||||
let isMessageSent = false;
|
||||
|
||||
const form = await createView({
|
||||
View: FormView,
|
||||
model: 'partner',
|
||||
data: this.data,
|
||||
services: this.services,
|
||||
arch: `
|
||||
<form string="Partners">
|
||||
<sheet>
|
||||
<field name="foo"/>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers"/>
|
||||
<field name="message_ids" widget="mail_thread" options="{'display_log_button': True}"/>
|
||||
</div>
|
||||
</form>`,
|
||||
res_id: 2,
|
||||
async mockRPC(route, args) {
|
||||
if (route === '/mail/read_followers') {
|
||||
return {
|
||||
followers: [],
|
||||
subtypes: [],
|
||||
};
|
||||
}
|
||||
if (route === '/mail/get_suggested_recipients') {
|
||||
if (isMessageSent) {
|
||||
return {
|
||||
2: [],
|
||||
};
|
||||
}
|
||||
return {
|
||||
2: [[2, "Jack <jack@example.com>", "Partner Profile"]],
|
||||
};
|
||||
}
|
||||
if (args.method === 'message_post') {
|
||||
isMessageSent = true;
|
||||
return 57923;
|
||||
}
|
||||
if (args.method === 'message_format') {
|
||||
return [{
|
||||
author_id: ["42", "Me"],
|
||||
model: 'partner',
|
||||
}];
|
||||
}
|
||||
return this._super(route, args);
|
||||
},
|
||||
session: {},
|
||||
});
|
||||
|
||||
await testUtils.dom.click(form.$('.o_chatter_button_new_message'));
|
||||
const $input = form.$('.oe_chatter .o_composer_text_field:first()');
|
||||
assert.containsOnce(
|
||||
form,
|
||||
'div.o_composer_suggested_partners input',
|
||||
"should show one suggested recipient");
|
||||
assert.strictEqual(
|
||||
form.$('div.o_composer_suggested_partners label').text().replace(/\s+/g, ''),
|
||||
"Jack(jack@example.com)",
|
||||
"should have the correct label");
|
||||
|
||||
$input.val("BBQ and beers tonight! Are you in?");
|
||||
await testUtils.dom.click(form.$('.o_composer_button_send'));
|
||||
// Open composer for new message
|
||||
await testUtils.dom.click(form.$('.o_chatter_button_new_message'));
|
||||
assert.containsNone(
|
||||
form,
|
||||
'div.o_composer_suggested_partners input',
|
||||
"should no longer show the suggested recipient");
|
||||
|
||||
form.destroy();
|
||||
});
|
||||
|
||||
QUnit.module('FieldMany2ManyTagsEmail', {
|
||||
beforeEach: function () {
|
||||
this.data = {
|
||||
|
||||
Reference in New Issue
Block a user