diff --git a/static/directives/teams-manager.html b/static/directives/teams-manager.html index 338e9fb72..99c248868 100644 --- a/static/directives/teams-manager.html +++ b/static/directives/teams-manager.html @@ -12,19 +12,23 @@ -
+
- -
-
+ +
+
-
+
-
-
No organization members found matching filter.
+
+
No users found matching filter.
- Please change your filter to display members. + Please change your filter to display users.
- +
- - + + - + -
Member NameTeamsUser NameTeams Direct Repository Permissions
-
+
- + @@ -163,20 +167,20 @@ - + (No direct permissions on any repositories) - - Direct permissions on {{ memberInfo.repositories.length }} - repository - repositories + + Direct permissions on {{ orgUser.repositories.length }} + repository + repositories under this organization - - + + Remove From Organization @@ -197,8 +201,8 @@
+ dialog-title="Remove User from Organization" + dialog-action-title="Remove">
will be removed from all teams and repositories under this organization in which they are a member or have permissions. diff --git a/static/js/directives/ui/teams-manager.js b/static/js/directives/ui/teams-manager.js index 63ef68540..1254675b6 100644 --- a/static/js/directives/ui/teams-manager.js +++ b/static/js/directives/ui/teams-manager.js @@ -17,6 +17,12 @@ angular.module('quay').directive('teamsManager', function () { $scope.Config = Config; $scope.Features = Features; + $scope.views = Object.freeze({ + TEAMS: 0, + MEMBERS: 1, + COLLABORATORS: 2 + }); + $scope.options = { 'predicate': 'ordered_team_index', 'reverse': false, @@ -35,8 +41,11 @@ angular.module('quay').directive('teamsManager', function () { $scope.orderedTeams = null; $scope.showingMembers = false; $scope.fullMemberList = null; + $scope.collaboratorList = null; + $scope.userView = null; $scope.feedback = null; $scope.createTeamInfo = null; + $scope.activeView = $scope.views.TEAMS; var getRoleIndex = function(name) { for (var i = 0; i < $scope.teamRoles.length; ++i) { @@ -67,6 +76,62 @@ angular.module('quay').directive('teamsManager', function () { ['ordered_team_index', 'member_count', 'repo_count', 'role_index']); }; + var loadMembers = function(callback) { + var params = { + 'orgname': $scope.organization.name + }; + + ApiService.getOrganizationMembers(null, params).then(function(resp) { + $scope.fullMemberList = resp['members']; + callback(); + }, ApiService.errorDisplay('Could not load full membership list')); + }; + + var loadCollaborators = function(callback) { + var params = { + 'orgname': $scope.organization.name + }; + + ApiService.getOrganizationCollaborators(null, params).then(function(resp) { + $scope.collaboratorList = resp['collaborators']; + callback(); + }, ApiService.errorDisplay('Could not load collaborators list')); + }; + + $scope.setActiveView = function(view) { + switch(view) { + case $scope.views.TEAMS: + // Nothing to do here. + break; + + case $scope.views.MEMBERS: + if (!$scope.fullMemberList) { + loadMembers(function() { + $scope.usersView = $scope.fullMemberList; + }); + } + + $scope.usersView = $scope.fullMemberList; + break; + + case $scope.views.COLLABORATORS: + if (!$scope.collaboratorList) { + loadCollaborators(function() { + $scope.usersView = $scope.collaboratorList; + }); + } + + $scope.usersView = $scope.collaboratorList; + break; + + default: + console.error('Invalid team-manager view: ' + view); + return; + } + + $scope.activeView = view; + } + $scope.setRole = function(role, teamname) { var previousRole = $scope.organization.teams[teamname].role; $scope.organization.teams[teamname].role = role; @@ -158,19 +223,6 @@ angular.module('quay').directive('teamsManager', function () { $location.path('/organization/' + $scope.organization.name + '/teams/' + teamName); }; - $scope.showMembers = function(value) { - $scope.showingMembers = value; - if (value && !$scope.fullMemberList) { - var params = { - 'orgname': $scope.organization.name - }; - - ApiService.getOrganizationMembers(null, params).then(function(resp) { - $scope.fullMemberList = resp['members']; - }, ApiService.errorDisplay('Could not load full membership list')); - } - }; - $scope.removeMember = function(memberInfo, callback) { var params = { 'orgname': $scope.organization.name, @@ -184,7 +236,8 @@ angular.module('quay').directive('teamsManager', function () { ApiService.removeOrganizationMember(null, params).then(function(resp) { // Reset the state of the directive. $scope.fullMemberList = null; - $scope.showMembers(true); + $scope.collaboratorList = null; + $scope.setActiveView($scope.activeView); callback(true); @@ -226,4 +279,4 @@ angular.module('quay').directive('teamsManager', function () { }; return directiveDefinitionObject; -}); \ No newline at end of file +});