[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) {
return PartnerModel.call('im_search', [search_val, limit || 20], {}, {shadow: true}).then(function(result) {
var values = [];
_.each(result, function(user) {
var escaped_name = _.escape(user.name);
values.push(_.extend(user, {
'value': escaped_name,
'label': escaped_name,
}));
var def = $.Deferred();
var values = [];
// search among prefetched partners
var search_regexp = new RegExp(utils.unaccent(search_val), 'i');
_.each(mention_partner_suggestions, function (partners) {
if (values.length < limit) {
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);
},
query: function (query) {
chat_manager.search_partner(query.term, 20).then(function(result){
var data = [];
_.each(result, function(partner){
partner.text = partner.name;
data.push(partner);
chat_manager.search_partner(query.term, 20).then(function (partners) {
query.callback({
results: _.map(partners, function (partner) {
return _.extend(partner, { text: partner.label });
}),
});
query.callback({results: data});
});
}
});
@@ -331,13 +330,12 @@ var ChatAction = Widget.extend(ControlPanelMixin, {
focus: function(event) {
event.preventDefault();
},
html: true,
});
this.$('.o_mail_add_channel[data-type=dm]').find("input").autocomplete({
source: function(request, response) {
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) {
var partner_id = ui.item.id;
@@ -346,7 +344,6 @@ var ChatAction = Widget.extend(ControlPanelMixin, {
focus: function(event) {
event.preventDefault();
},
html: true,
});
this.$('.o_mail_add_channel[data-type=private]').find("input").on('keyup', this, function (event) {