summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorLucas Lefèvre <lul@odoo.com>2019-08-09 12:21:35 +0000
committerAlexandre Kühn <aku@odoo.com>2019-08-14 12:11:18 +0000
commit14bb91e9ae942c01ce36a2fa9db601f7b09b3ce8 (patch)
tree66a64c6f6deb4ecb90533d88cfe854f4c2a9a0bc /addons
parent59f838d5b12f56d68ccf184b16fd4ac236fa3cbd (diff)
[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>
Diffstat (limited to 'addons')
-rw-r--r--addons/mail/static/src/js/chatter.js29
-rw-r--r--addons/mail/static/src/js/composers/chatter_composer.js3
-rw-r--r--addons/mail/static/tests/chatter_tests.js76
3 files changed, 102 insertions, 6 deletions
diff --git a/addons/mail/static/src/js/chatter.js b/addons/mail/static/src/js/chatter.js
index 164a24cd7b8..9f0299565d2 100644
--- a/addons/mail/static/src/js/chatter.js
+++ b/addons/mail/static/src/js/chatter.js
@@ -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);
@@ -408,6 +410,12 @@ var Chatter = Widget.extend({
},
/**
* @private
+ */
+ _resetSuggestedPartners() {
+ this._suggestedPartnersProm = undefined;
+ },
+ /**
+ * @private
* @param {Object} record
* @param {integer} [record.res_id]
* @param {string} [record.model]
@@ -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 });
});
},
@@ -612,6 +621,14 @@ var Chatter = Widget.extend({
},
/**
* @private
+ * @param {OdooEvent} ev
+ */
+ _onResetSuggestedPartners(ev) {
+ ev.stopPropagation();
+ this._resetSuggestedPartners();
+ },
+ /**
+ * @private
*/
_onScheduleActivity: function () {
this.fields.activity.scheduleActivity();
diff --git a/addons/mail/static/src/js/composers/chatter_composer.js b/addons/mail/static/src/js/composers/chatter_composer.js
index 3109528cfed..4b20e5b2d25 100644
--- a/addons/mail/static/src/js/composers/chatter_composer.js
+++ b/addons/mail/static/src/js/composers/chatter_composer.js
@@ -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 {
diff --git a/addons/mail/static/tests/chatter_tests.js b/addons/mail/static/tests/chatter_tests.js
index 1c57150e28c..f0f3394c1e1 100644
--- a/addons/mail/static/tests/chatter_tests.js
+++ b/addons/mail/static/tests/chatter_tests.js
@@ -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 = {