in routes/org/team/index.ts [444:606]
async function basicTeamsView(req: ILocalRequest, display: BasicTeamViewPage) {
const providers = getProviders(req);
const showManagementFeatures = parseInt(req.query['inline-management'] as string) == 1;
const idAsString = req.individualContext.getGitHubIdentity().id;
const id = idAsString ? parseInt(idAsString, 10) : null;
const teamPermissions = req.teamPermissions as IRequestTeamPermissions;
const membershipStatus = req.membershipStatus;
const membershipState = req.membershipState;
const team2 = req.team2 as Team;
const { operations } = getProviders(req);
const organization = req.organization as Organization;
const teamMaintainers = req.teamMaintainers as TeamMember[];
const maintainersSet = new Set();
for (let i = 0; i < teamMaintainers.length; i++) {
maintainersSet.add(teamMaintainers[i].id);
}
let membersFirstPage: TeamMember[] = [];
let teamDetails = null;
let repositories = null;
const isBroadAccessTeam = team2.isBroadAccessTeam;
const isSystemTeam = team2.isSystemTeam;
const orgOwnersSet = req.orgOwnersSet;
let isOrgOwner = orgOwnersSet ? orgOwnersSet.has(id) : false;
// Get the first page (by 100) of members, we only show a subset of 25
if (display === BasicTeamViewPage.Default) {
const firstPageOptions = {
pageLimit: 1,
backgroundRefresh: true,
maxAgeSeconds: 60,
};
const membersSubset = await team2.getMembers(firstPageOptions);
membersFirstPage = membersSubset.slice(0, FirstPageMembersCap);
}
const details = await team2.getDetails();
teamDetails = details;
if (display === BasicTeamViewPage.Repositories) {
const onlySourceRepositories = {
type: GitHubRepositoryType.Sources,
};
let reposWithPermissions = null;
try {
if (display === BasicTeamViewPage.Repositories) {
reposWithPermissions = await team2.getRepositories(onlySourceRepositories);
repositories = reposWithPermissions.sort(sortRepositoriesByNameCaseInsensitive);
}
} catch (ignoredError) {
console.dir(ignoredError);
}
}
const map = new Map<number, ICorporateLink>();
let links: ICorporateLink[] = null;
if (Math.max(teamMaintainers.length, membersFirstPage.length) > FirstPageMembersCap) {
links = await operations.getLinks();
} else {
const ids = Array.from((new Set([...teamMaintainers, ...membersFirstPage].map(tm => String(tm.id)))).values());
links = await operations.getLinksFromThirdPartyIds(ids);
}
for (let i = 0; i < links.length; i++) {
const id = links[i].thirdPartyId;
if (id) {
map.set(parseInt(id, 10), links[i]);
}
}
addLinkToList(teamMaintainers, map);
await resolveMailAddresses(operations, teamMaintainers);
if (display === BasicTeamViewPage.Default) {
addLinkToList(membersFirstPage, map);
await resolveMailAddresses(operations, membersFirstPage);
}
const organizationPermissions = GetOrganizationPermissionsFromRequest(req);
let history = null;
if (display === BasicTeamViewPage.History && providers.auditLogRecordProvider) {
const { auditLogRecordProvider } = providers;
history = await auditLogRecordProvider.queryAuditLogForTeamOperations(team2.id.toString());
}
let title = team2.name;
if (display === BasicTeamViewPage.Repositories) {
title = `Repositories - ${team2.name}`;
} else if (display === BasicTeamViewPage.History) {
title = `History - ${team2.name}`;
}
const mailSubjectSuffix = `?subject=${team2.name} GitHub team`;
const maintainerMails = teamMaintainers.map(maint => maint.mailAddress).filter(val => val);
let mailToMaintainers = maintainerMails.length ? `mailto:${maintainerMails.join(';')}${mailSubjectSuffix}` : null;
let mailToMaintainersCount = maintainerMails.length;
// on purpose the members would only include those shown on the first page here if there are less than the cap # of members
const memberMails = membersFirstPage.map(mem => mem.mailAddress).filter(val => val);
let mailToMembers = memberMails.length && memberMails.length !== FirstPageMembersCap ? `mailto:${memberMails.join(';')}${mailSubjectSuffix}` : null;
let mailToMembersCount = memberMails.length;
const { selfServiceTeamMemberToMaintainerUpgrades } = req;
let isSelfServiceMemberToMaintainerEligible = false;
if (display === BasicTeamViewPage.Default && req.membershipStatus === GitHubTeamRole.Member && selfServiceTeamMemberToMaintainerUpgrades) {
const isTeamEligible = await selfServiceTeamMemberToMaintainerUpgrades.isTeamEligible(true /* cache is OK */);
if (typeof (isTeamEligible) !== 'string') {
isSelfServiceMemberToMaintainerEligible = true;
}
}
return req.individualContext.webContext.render({
view: 'org/team/index',
title,
state: {
display,
team: team2,
teamUrl: req.teamUrl, // ?
employees: [], // data.employees,
otherApprovals: req.otherApprovals,
// changed implementation:
maintainers: teamMaintainers,
maintainersSet,
history,
// new values:
teamPermissions,
membershipStatus,
membershipState,
membersFirstPage,
team2,
teamDetails,
organization,
isBroadAccessTeam,
isSystemTeam,
repositories,
isOrgOwner,
orgOwnersSet,
organizationPermissions,
showManagementFeatures,
// contacts
mailToMaintainers,
mailToMaintainersCount,
mailToMembers,
mailToMembersCount,
// provider refactoring additions
existingTeamJoinRequest: req.existingRequest,
// self-service feature
isSelfServiceMemberToMaintainerEligible,
},
});
}