[IMP] mail: Discuss: lookup in JS cache before doing RPC

When opening a new DM from the Discuss sidebar or from a chat window, and
when inviting people to a channel, first search for a match in the prefetched
partners (basically, the employees), and only perform the im_search RPC
(extending the research to all users) if there is no match.

Also sort the results by name.
This commit is contained in:
Rohan Patel
2016-04-28 10:56:31 +02:00
committed by Aaron Bohy
parent 5c545e3244
commit 33beee5b08
2 changed files with 27 additions and 18 deletions
+21 -9
View File
@@ -934,16 +934,28 @@ var chat_manager = {
}, },
search_partner: function (search_val, limit) { search_partner: function (search_val, limit) {
return PartnerModel.call('im_search', [search_val, limit || 20], {}, {shadow: true}).then(function(result) { var def = $.Deferred();
var values = []; var values = [];
_.each(result, function(user) { // search among prefetched partners
var escaped_name = _.escape(user.name); var search_regexp = new RegExp(utils.unaccent(search_val), 'i');
values.push(_.extend(user, { _.each(mention_partner_suggestions, function (partners) {
'value': escaped_name, if (values.length < limit) {
'label': escaped_name, values = values.concat(_.filter(partners, function (partner) {
})); return session.partner_id !== partner.id && search_regexp.test(partner.name);
})).splice(0, limit);
}
});
if (!values.length) {
// extend the research to all users
def = PartnerModel.call('im_search', [search_val, limit || 20], {}, {shadow: true});
} else {
def = $.when(values);
}
return def.then(function (values) {
var autocomplete_data = _.map(values, function (value) {
return { id: value.id, value: value.name, label: value.name };
}); });
return values; return _.sortBy(autocomplete_data, 'label');
}); });
}, },
}; };
+6 -9
View File
@@ -56,13 +56,12 @@ var PartnerInviteDialog = Dialog.extend({
return $('<span>').text(item.text).prepend(status); return $('<span>').text(item.text).prepend(status);
}, },
query: function (query) { query: function (query) {
chat_manager.search_partner(query.term, 20).then(function(result){ chat_manager.search_partner(query.term, 20).then(function (partners) {
var data = []; query.callback({
_.each(result, function(partner){ results: _.map(partners, function (partner) {
partner.text = partner.name; return _.extend(partner, { text: partner.label });
data.push(partner); }),
}); });
query.callback({results: data});
}); });
} }
}); });
@@ -331,13 +330,12 @@ var ChatAction = Widget.extend(ControlPanelMixin, {
focus: function(event) { focus: function(event) {
event.preventDefault(); event.preventDefault();
}, },
html: true,
}); });
this.$('.o_mail_add_channel[data-type=dm]').find("input").autocomplete({ this.$('.o_mail_add_channel[data-type=dm]').find("input").autocomplete({
source: function(request, response) { source: function(request, response) {
self.last_search_val = _.escape(request.term); self.last_search_val = _.escape(request.term);
chat_manager.search_partner(self.last_search_val).done(response); chat_manager.search_partner(self.last_search_val, 10).done(response);
}, },
select: function(event, ui) { select: function(event, ui) {
var partner_id = ui.item.id; var partner_id = ui.item.id;
@@ -346,7 +344,6 @@ var ChatAction = Widget.extend(ControlPanelMixin, {
focus: function(event) { focus: function(event) {
event.preventDefault(); event.preventDefault();
}, },
html: true,
}); });
this.$('.o_mail_add_channel[data-type=private]').find("input").on('keyup', this, function (event) { this.$('.o_mail_add_channel[data-type=private]').find("input").on('keyup', this, function (event) {