Merge branch 'hotfix/21.56.9' into master
[gitter.git] / server / services / typeaheads / user-typeahead-one-to-one.js
blob56f93b92e500c2a5870f908bb9b8376b4d443073
1 'use strict';
3 var Promise = require('bluebird');
4 var userService = require('gitter-web-users');
5 var inputsForUser = require('./elastic-inputs-for-user');
7 module.exports = {
8   query: function(text, room) {
9     // not matching anything with an empty query, just like elastic
10     if (!text) return Promise.resolve([]);
12     var lcText = text.toLowerCase();
13     var userIds = room.oneToOneUsers.map(function(obj) {
14       return obj.userId;
15     });
17     return userService.findByIds(userIds).then(function(users) {
18       return users.filter(function(user) {
19         return getNames(user).some(function(name) {
20           return name.indexOf(lcText) === 0;
21         });
22       });
23     });
24   }
27 function getNames(user) {
28   // elastic normally does this analysis, but we're faking it
29   var nonWhitespaceAlternatives = [];
30   return inputsForUser(user)
31     .map(function(input) {
32       var lcInput = input.toLowerCase();
33       var nonWhitespace = lcInput
34         .split(/\s/)
35         .filter(Boolean)
36         .join('');
37       if (lcInput !== nonWhitespace) {
38         nonWhitespaceAlternatives.push(nonWhitespace);
39       }
40       return lcInput;
41     })
42     .concat(nonWhitespaceAlternatives);