-
Notifications
You must be signed in to change notification settings - Fork 180
/
hub-source__users-groups.js
60 lines (51 loc) · 1.61 KB
/
hub-source__users-groups.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import HubSource from './hub-source';
const defaultOptions = {
searchMax: 20,
searchSideThreshold: 200
};
export default class HubSourceUsersGroups {
constructor(auth, options) {
this.auth = auth;
this.options = Object.assign({}, defaultOptions, options);
this.usersSource = new HubSource(auth, 'users', {
searchMax: this.options.searchMax,
searchSideThreshold: this.options.searchSideThreshold,
queryFormatter: query => `nameStartsWith: ${HubSourceUsersGroups.wrapMultiwordQuery(query)} or loginStartsWith: ${HubSourceUsersGroups.wrapMultiwordQuery(query)}`
});
this.groupsSource = new HubSource(auth, 'usergroups', {
searchMax: this.options.searchMax,
searchSideThreshold: this.options.searchSideThreshold
});
}
static wrapMultiwordQuery(query) {
if (query && query.indexOf(' ') !== -1) {
return `{${query}}`;
}
return query;
}
createUsersFilterFn(query) {
if (!query) {
return () => true;
}
const normalizedQuery = query.toLowerCase();
return it => (
it.name.toLowerCase().indexOf(normalizedQuery) !== -1 ||
it.login.toLowerCase().indexOf(normalizedQuery) !== -1
);
}
getUsers(query = '') {
return this.usersSource.get(query, {
fields: 'id,name,login,total,profile/avatar/url',
orderBy: 'name'
}, this.createUsersFilterFn(query));
}
getGroups(query = '') {
return this.groupsSource.get(query, {
fields: 'id,name,total,userCount,iconUrl',
orderBy: 'name'
});
}
getUserAndGroups(query) {
return Promise.all([this.getUsers(query), this.getGroups(query)]);
}
}