diff --git a/src/js/client.js b/src/js/client.js index 5d6a9d08f..bae1d5540 100644 --- a/src/js/client.js +++ b/src/js/client.js @@ -845,9 +845,10 @@ angular.module('Application').service('Client', ['$http', '$interval', 'md5', 'N }); }; - Client.prototype.getUsers = function (page, perPage, callback) { - if (typeof page === 'function') { - callback = page; + Client.prototype.getUsers = function (search, page, perPage, callback) { + if (typeof search === 'function') { + callback = search; + search = ''; page = 1; perPage = 1000; } @@ -859,6 +860,8 @@ angular.module('Application').service('Client', ['$http', '$interval', 'md5', 'N } }; + if (search) config.params.search = search; + get('/api/v1/users', config, function (error, data, status) { if (error) return callback(error); if (status !== 200) return callback(new ClientError(status, data)); diff --git a/src/js/index.js b/src/js/index.js index 86268ab7a..43f637a8f 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -18,6 +18,32 @@ if (search.accessToken) { } // poor man's async in the global namespace +function asyncForEachParallel(items, handler, callback) { + var alreadyDone = 0; + var errored = false; + + if (items.length === 0) return callback(); + + function done(error) { + // do nothing if already called back due to error + if (errored) return; + + if (error) { + errored = true; + return callback(error); + } + + ++alreadyDone; + + // we are done + if (alreadyDone === items.length) callback(); + } + + for (var i = 0; i < items.length; ++i) { + handler(items[i], done); + } +} + function asyncForEach(items, handler, callback) { var cur = 0; diff --git a/src/views/users.html b/src/views/users.html index 67d846788..6295c0c6f 100644 --- a/src/views/users.html +++ b/src/views/users.html @@ -298,7 +298,7 @@
| diff --git a/src/views/users.js b/src/views/users.js index 81a7f8f1f..a2f840672 100644 --- a/src/views/users.js +++ b/src/views/users.js @@ -2,7 +2,7 @@ /* global angular:false */ /* global Clipboard:false */ -/* global asyncForEach:false */ +/* global asyncForEachParallel:false */ /* global asyncSeries:false */ /* global $:false */ @@ -17,6 +17,7 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio $scope.config = Client.getConfig(); $scope.userInfo = Client.getUserInfo(); + $scope.userSearchString = ''; $scope.currentPage = 1; $scope.pageItemCount = [ { name: 'Show 20 per page', value: 20 }, @@ -24,7 +25,7 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio { name: 'Show 100 per page', value: 100 } ]; $scope.pageItems = $scope.pageItemCount[0]; - $scope.userRefreshBusy = false; + $scope.userRefreshBusy = true; $scope.groupMembers = function (group) { return group.userIds.filter(function (uid) { return !!$scope.usersById[uid]; }).map(function (uid) { return $scope.usersById[uid].username || $scope.usersById[uid].email; }).join(' '); @@ -450,12 +451,12 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio }; function getUsers(callback) { - var users = [ ]; + var users = []; - Client.getUsers($scope.currentPage, $scope.pageItems.value, function (error, results) { + Client.getUsers($scope.userSearchString, $scope.currentPage, $scope.pageItems.value, function (error, results) { if (error) return console.error(error); - asyncForEach(results, function (result, iteratorDone) { + asyncForEachParallel(results, function (result, iteratorDone) { Client.getUser(result.id, function (error, user) { if (error) return iteratorDone(error); @@ -470,12 +471,12 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio } function getGroups(callback) { - var groups = [ ]; + var groups = []; Client.getGroups(function (error, results) { if (error) return console.error(error); - asyncForEach(results, function (result, iteratorDone) { + asyncForEachParallel(results, function (result, iteratorDone) { Client.getGroup(result.id, function (error, group) { if (error) return iteratorDone(error); |
|---|