export function getProgressMap()

in src/service/ProgressCalculationService.ts [23:77]


export function getProgressMap(teams: WebApiTeam[], teamDictionary: Map<string, TeamDictionaryValue>, workItemTypes: Map<string, string>): Map<string, ProgressInterface> {
  const progressMap = new Map<string, ProgressInterface>();

  teams.forEach(team => {
    const { connections, map } = { ...teamDictionary.get(team.id)! };

    Object.keys(connections)
      .map(itemId => connections[itemId])
      .filter(it => it.length === 1)
      .reduce((acc, next) => [...acc, ...next], [])
      .forEach(it => {
        const item = map.get(`${it.target.id}`)!;
        const progressItem = calculateSimpleItems(team.id, item);
        const iconUri = workItemTypes.get(progressItem.type);
        progressMap.set(`${team.id}_${item.id}`, { ...progressItem, ...(iconUri ? { iconUri } : {}) });
      });

    const set = new Set<string>();

    const itemsWithChild = Object.keys(connections)
      .map(itemId => connections[itemId])
      .filter(it => it.length > 1)
      .reduce((acc, next) => [...acc, ...next], [])

    const parentsId = new Set(itemsWithChild.filter(it => it.source).map(it => it.source.id))
    itemsWithChild
      .filter(it => !parentsId.has(it.target.id))
      .forEach(it => {
        const item = map.get(`${it.target.id}`)!;
        const progressItem = calculateSimpleItems(team.id, item);
        const iconUri = workItemTypes.get(progressItem.type);
        progressMap.set(`${team.id}_${item.id}`, { ...progressItem, ...(iconUri ? { iconUri } : {}) });
      });

    Object.keys(connections)
      .map(itemId => connections[itemId])
      .filter(it => it.length > 1)
      .forEach(it => {
        it.slice().reverse()
          .filter(it => parentsId.has(it.target.id))
          .forEach(e => {
            const item = map.get(`${e.target.id}`)!;
            const subItems = Array.from(progressMap.values())
              .filter(subItem => subItem.parentId === item.id)
              .map(subItem => subItem.subtaskProgress);

            const progressItem = calculateTimelineProgressItems(team.id, map.get(`${e.target.id}`)!, subItems);

            const iconUri = workItemTypes.get(progressItem.type);
            progressMap.set(`${team.id}_${item.id}`, { ...progressItem, ...(iconUri ? { iconUri } : {}) });
          })
      });
  });
  return progressMap;
}