Redesign the teams page to use a table
Allows for faster loading and easier viewing of important information about teams
This commit is contained in:
parent
98206310bd
commit
6ebb417923
11 changed files with 194 additions and 168 deletions
|
@ -12,7 +12,15 @@ angular.module('quay').directive('teamsManager', function () {
|
|||
'organization': '=organization',
|
||||
'isEnabled': '=isEnabled'
|
||||
},
|
||||
controller: function($scope, $element, ApiService, $timeout, UserService) {
|
||||
controller: function($scope, $element, ApiService, $timeout, UserService, TableService, UIService) {
|
||||
$scope.TableService = TableService;
|
||||
|
||||
$scope.options = {
|
||||
'predicate': 'ordered_team_index',
|
||||
'reverse': false,
|
||||
'filter': ''
|
||||
};
|
||||
|
||||
$scope.teamRoles = [
|
||||
{ 'id': 'member', 'title': 'Member', 'kind': 'default' },
|
||||
{ 'id': 'creator', 'title': 'Creator', 'kind': 'success' },
|
||||
|
@ -21,65 +29,42 @@ angular.module('quay').directive('teamsManager', function () {
|
|||
|
||||
UserService.updateUserIn($scope);
|
||||
|
||||
$scope.members = {};
|
||||
$scope.orderedTeams = [];
|
||||
$scope.teams = null;
|
||||
$scope.orderedTeams = null;
|
||||
$scope.showingMembers = false;
|
||||
$scope.fullMemberList = null;
|
||||
$scope.feedback = null;
|
||||
$scope.createTeamInfo = null;
|
||||
|
||||
var loadTeamMembers = function() {
|
||||
if (!$scope.organization || !$scope.isEnabled) { return; }
|
||||
|
||||
// Skip loading team members on mobile.
|
||||
if (!window.matchMedia('(min-width: 768px)').matches) {
|
||||
return;
|
||||
var getRoleIndex = function(name) {
|
||||
for (var i = 0; i < $scope.teamRoles.length; ++i) {
|
||||
if ($scope.teamRoles[i]['id'] == name) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
for (var name in $scope.organization.teams) {
|
||||
if (!$scope.organization.teams.hasOwnProperty(name) || $scope.members[name]) { continue; }
|
||||
|
||||
// Load fully async to prevent it from blocking the UI.
|
||||
(function(teamname) {
|
||||
$timeout(function() {
|
||||
loadMembersOfTeam(teamname);
|
||||
}, 1);
|
||||
})(name);
|
||||
}
|
||||
return -1;
|
||||
};
|
||||
|
||||
var loadMembersOfTeam = function(name) {
|
||||
var params = {
|
||||
'orgname': $scope.organization.name,
|
||||
'teamname': name
|
||||
};
|
||||
|
||||
$scope.members[name] = {};
|
||||
|
||||
ApiService.getOrganizationTeamMembers(null, params).then(function(resp) {
|
||||
$scope.members[name].members = resp.members;
|
||||
}, function() {
|
||||
delete $scope.members[name];
|
||||
});
|
||||
};
|
||||
|
||||
var loadOrderedTeams = function() {
|
||||
var setTeamsState = function() {
|
||||
if (!$scope.organization || !$scope.organization.ordered_teams || !$scope.isEnabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
$scope.orderedTeams = [];
|
||||
$scope.organization.ordered_teams.map(function(name) {
|
||||
$scope.orderedTeams.push($scope.organization.teams[name]);
|
||||
$scope.teams = [];
|
||||
$scope.organization.ordered_teams.map(function(name, index) {
|
||||
var team = $scope.organization.teams[name];
|
||||
team['ordered_team_index'] = $scope.organization.ordered_teams.length - index;
|
||||
team['role_index'] = getRoleIndex(team['role']);
|
||||
$scope.teams.push(team);
|
||||
});
|
||||
|
||||
$scope.orderedTeams = TableService.buildOrderedItems(
|
||||
$scope.teams, $scope.options,
|
||||
['name'],
|
||||
['ordered_team_index', 'member_count', 'repo_count', 'role_index']);
|
||||
};
|
||||
|
||||
$scope.$watch('organization', loadOrderedTeams);
|
||||
$scope.$watch('organization', loadTeamMembers);
|
||||
|
||||
$scope.$watch('isEnabled', loadOrderedTeams);
|
||||
$scope.$watch('isEnabled', loadTeamMembers);
|
||||
|
||||
$scope.setRole = function(role, teamname) {
|
||||
var previousRole = $scope.organization.teams[teamname].role;
|
||||
$scope.organization.teams[teamname].role = role;
|
||||
|
@ -115,9 +100,9 @@ angular.module('quay').directive('teamsManager', function () {
|
|||
|
||||
$scope.handleTeamCreated = function(created) {
|
||||
var teamname = created.name;
|
||||
created['member_count'] = 0;
|
||||
|
||||
$scope.organization.teams[teamname] = created;
|
||||
$scope.members[teamname] = {};
|
||||
$scope.members[teamname].members = [];
|
||||
$scope.organization.ordered_teams.push(teamname);
|
||||
$scope.orderedTeams.push(created);
|
||||
|
||||
|
@ -150,8 +135,8 @@ angular.module('quay').directive('teamsManager', function () {
|
|||
$scope.organization.ordered_teams.splice(index, 1);
|
||||
}
|
||||
|
||||
loadOrderedTeams();
|
||||
delete $scope.organization.teams[teamname];
|
||||
setTeamsState();
|
||||
|
||||
$scope.feedback = {
|
||||
'kind': 'success',
|
||||
|
@ -192,12 +177,7 @@ angular.module('quay').directive('teamsManager', function () {
|
|||
|
||||
ApiService.removeOrganizationMember(null, params).then(function(resp) {
|
||||
// Reset the state of the directive.
|
||||
$scope.members = {};
|
||||
$scope.orderedTeams = [];
|
||||
$scope.fullMemberList = null;
|
||||
|
||||
loadOrderedTeams();
|
||||
loadTeamMembers();
|
||||
$scope.showMembers(true);
|
||||
|
||||
callback(true);
|
||||
|
@ -215,6 +195,13 @@ angular.module('quay').directive('teamsManager', function () {
|
|||
$scope.askRemoveMember = function(memberInfo) {
|
||||
$scope.removeMemberInfo = $.extend({}, memberInfo);
|
||||
};
|
||||
|
||||
$scope.$watch('organization', setTeamsState);
|
||||
$scope.$watch('isEnabled', setTeamsState);
|
||||
|
||||
$scope.$watch('options.predicate', setTeamsState);
|
||||
$scope.$watch('options.reverse', setTeamsState);
|
||||
$scope.$watch('options.filter', setTeamsState);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Reference in a new issue