diff --git a/static/directives/manage-users-tab.html b/static/directives/manage-users-tab.html index 18d10ec84..730ebf15a 100644 --- a/static/directives/manage-users-tab.html +++ b/static/directives/manage-users-tab.html @@ -14,30 +14,40 @@ -
- - +
+ + + + +
+
- - - - + + + + -
UsernameE-mail address + Username + + E-mail address +
- + - - You - Superuser - Disabled - + + You + Superuser + Disabled + {{ current_user.username }} diff --git a/static/js/directives/ui/manage-user-tab.js b/static/js/directives/ui/manage-user-tab.js index 6193925f9..7695936b4 100644 --- a/static/js/directives/ui/manage-user-tab.js +++ b/static/js/directives/ui/manage-user-tab.js @@ -9,30 +9,61 @@ angular.module('quay').directive('manageUserTab', function () { transclude: true, restrict: 'C', scope: { - 'isEnabled': '=isEnabled' + 'isEnabled': '=isEnabled' }, - controller: function ($scope, $timeout, $location, $element, ApiService, UserService) { + controller: function ($scope, $timeout, $location, $element, ApiService, UserService, TableService) { + $scope.user = UserService.currentUser(); + $scope.users = null; + $scope.orderedUsers = []; + $scope.usersPerPage = 10; $scope.newUser = {}; $scope.createdUser = null; $scope.takeOwnershipInfo = null; - + $scope.options = { + 'predicate': 'username', + 'reverse': false, + 'filter': null, + 'page': 0 + }; $scope.showCreateUser = function () { $scope.createdUser = null; $('#createUserModal').modal('show'); }; + var sortUsers = function() { + if (!$scope.users) {return;} + $scope.orderedUsers = TableService.buildOrderedItems($scope.users, $scope.options, + ['username', 'email'], []); + }; + var loadUsersInternal = function () { ApiService.listAllUsers().then(function (resp) { $scope.users = resp['users']; + sortUsers(); $scope.showInterface = true; }, function (resp) { $scope.users = []; $scope.usersError = ApiService.getErrorMessage(resp); }); }; + $scope.tablePredicateClass = function(name, predicate, reverse) { + if (name != predicate) { + return ''; + } + return 'current ' + (reverse ? 'reversed' : ''); + }; + + $scope.orderBy = function(predicate) { + if (predicate == $scope.options.predicate) { + $scope.options.reverse = !$scope.options.reverse; + return; + } + $scope.options.reverse = false; + $scope.options.predicate = predicate; + }; $scope.createUser = function () { $scope.creatingUser = true; $scope.createdUser = null; @@ -224,6 +255,10 @@ angular.module('quay').directive('manageUserTab', function () { loadUsersInternal(); } }); + + $scope.$watch('options.predicate', sortUsers); + $scope.$watch('options.reverse', sortUsers); + $scope.$watch('options.filter', sortUsers); } }; return directiveDefinitionObject; diff --git a/static/js/pages/superuser.js b/static/js/pages/superuser.js index 91bee789a..4751c0b67 100644 --- a/static/js/pages/superuser.js +++ b/static/js/pages/superuser.js @@ -10,7 +10,7 @@ }) }]); - function SuperuserCtrl($scope, ApiService, Features, UserService, ContainerService, AngularPollChannel, CoreDialog) { + function SuperuserCtrl($scope, ApiService, Features, UserService, ContainerService, AngularPollChannel, CoreDialog, TableService) { if (!Features.SUPER_USERS) { return; } @@ -31,6 +31,14 @@ $scope.serviceKeysActive = false; $scope.globalMessagesActive = false; $scope.manageUsersActive = false; + $scope.orderedOrgs = []; + $scope.orgsPerPage = 10; + $scope.options = { + 'predicate': 'name', + 'reverse': false, + 'filter': null, + 'page': 0, + } $scope.loadMessageOfTheDay = function () { $scope.globalMessagesActive = true; @@ -106,9 +114,16 @@ $scope.loadOrganizationsInternal(); }; + var sortOrgs = function() { + if (!$scope.organizations) {return;} + $scope.orderedOrgs = TableService.buildOrderedItems($scope.organizations, $scope.options, + ['name', 'email'], []); + }; + $scope.loadOrganizationsInternal = function() { $scope.organizationsResource = ApiService.listAllOrganizationsAsResource().get(function(resp) { $scope.organizations = resp['organizations']; + sortOrgs(); return $scope.organizations; }); }; @@ -117,6 +132,21 @@ $scope.manageUsersActive = true; }; + $scope.tablePredicateClass = function(name, predicate, reverse) { + if (name != predicate) { + return ''; + } + return 'current ' + (reverse ? 'reversed' : ''); + }; + + $scope.orderBy = function(predicate) { + if (predicate == $scope.options.predicate) { + $scope.options.reverse = !$scope.options.reverse; + return; + } + $scope.options.reverse = false; + $scope.options.predicate = predicate; + }; $scope.askDeleteOrganization = function(org) { bootbox.confirm('Are you sure you want to delete this organization? Its data will be deleted with it.', function(result) { @@ -185,5 +215,9 @@ // Load the initial status. $scope.checkStatus(); + $scope.$watch('options.predicate', sortOrgs); + $scope.$watch('options.reverse', sortOrgs); + $scope.$watch('options.filter', sortOrgs); + } }()); diff --git a/static/partials/super-user.html b/static/partials/super-user.html index 4e9eaa943..68605654c 100644 --- a/static/partials/super-user.html +++ b/static/partials/super-user.html @@ -111,17 +111,29 @@
-
+
+ + + + +
- +
- - + + + -
NameAdmin E-mail + Name + + Admin Email +