async function basicTeamsView()

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,
    },
  });
}