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