[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:
@@ -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');
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user