in legacy/src/Calendar/EventSources/VSOCapacityEventSource.ts [73:229]
public getEvents(query?: Calendar_Contracts.IEventQuery): PromiseLike<Calendar_Contracts.CalendarEvent[]> {
const capacityPromises: PromiseLike<Work_Contracts.TeamMemberCapacity[]>[] = [];
const iterationTeamDaysOffPromises: PromiseLike<Work_Contracts.TeamSettingsDaysOff>[] = [];
const eventMap: { [dateString: string]: Calendar_Contracts.CalendarEvent } = {};
this._events = null;
this._renderedEvents = null;
const events: Calendar_Contracts.CalendarEvent[] = [];
const renderedEvents: Calendar_Contracts.CalendarEvent[] = [];
const webContext = VSS.getWebContext();
const teamContext: TFS_Core_Contracts.TeamContext = {
projectId: webContext.project.id,
teamId: this._team.id,
project: "",
team: "",
};
const workClient: Work_Client.WorkHttpClient2_1 = Service.VssConnection
.getConnection()
.getHttpClient(Work_Client.WorkHttpClient2_1, WebApi_Constants.ServiceInstanceTypes.TFS);
return realPromise(this.getIterations()).then(iterations => {
if (!iterations || iterations.length === 0) {
this._events = events;
this._renderedEvents = renderedEvents;
return renderedEvents;
}
for (const iteration of iterations) {
iterationTeamDaysOffPromises.push(workClient.getTeamDaysOff(teamContext, iteration.id));
iterationTeamDaysOffPromises[
iterationTeamDaysOffPromises.length - 1
].then((teamDaysOff: Work_Contracts.TeamSettingsDaysOff) => {
if (teamDaysOff && teamDaysOff.daysOff && teamDaysOff.daysOff.length) {
for (const daysOffRange of teamDaysOff.daysOff) {
const event: any = {};
event.startDate = new Date(daysOffRange.start.valueOf()).toISOString();
event.endDate = new Date(daysOffRange.end.valueOf()).toISOString();
event.title = "Team Day Off";
event.member = {
displayName: this._team.name,
id: this._team.id,
imageUrl: this._buildTeamImageUrl(webContext.host.uri, this._team.id),
};
event.category = <Calendar_Contracts.IEventCategory>{
id: this.id + "." + "Everyone",
title: IdentityHelper.parseUniquefiedIdentityName(event.member.displayName),
imageUrl: this._buildTeamImageUrl(webContext.host.uri, teamContext.teamId),
color: this._categoryColor,
};
event.id = this._buildCapacityEventId(event);
event.iterationId = iteration.id;
event.icons = [
{
src: event.category.imageUrl,
title: event.title,
linkedEvent: event,
},
];
events.push(event);
// add personal day off event to calendar day off events
const dates = Calendar_DateUtils.getDatesInRange(daysOffRange.start, daysOffRange.end);
for (const dateObj of dates) {
const date = dateObj.toISOString();
if (!eventMap[date]) {
const regroupedEvent: Calendar_Contracts.CalendarEvent = {
startDate: date,
endDate: date,
member: event.member,
title: "",
id: this.id + "." + date,
category: <Calendar_Contracts.IEventCategory>{
id: "",
title: "Grouped Event",
color: this._categoryColor,
},
icons: [],
};
eventMap[date] = regroupedEvent;
renderedEvents.push(regroupedEvent);
}
eventMap[date].icons.push(event.icons[0]);
}
}
}
return renderedEvents;
});
capacityPromises.push(workClient.getCapacities(teamContext, iteration.id));
capacityPromises[capacityPromises.length - 1].then((capacities: Work_Contracts.TeamMemberCapacity[]) => {
if (capacities && capacities.length) {
for (const capacity of capacities) {
for (const daysOffRange of capacity.daysOff) {
const event: any = {};
event.startDate = new Date(daysOffRange.start.valueOf()).toISOString();
event.endDate = new Date(daysOffRange.end.valueOf()).toISOString();
event.title =
IdentityHelper.parseUniquefiedIdentityName(capacity.teamMember.displayName) + " Day Off";
event.member = capacity.teamMember;
event.category = <Calendar_Contracts.IEventCategory>{
id: this.id + "." + capacity.teamMember.uniqueName,
title: IdentityHelper.parseUniquefiedIdentityName(event.member.displayName),
imageUrl: event.member.imageUrl,
color: this._categoryColor,
};
event.id = this._buildCapacityEventId(event);
event.iterationId = iteration.id;
event.icons = [
{
src: event.category.imageUrl,
title: event.title,
linkedEvent: event,
},
];
events.push(event);
// add personal day off event to calendar day off events
const dates = Calendar_DateUtils.getDatesInRange(daysOffRange.start, daysOffRange.end);
for (const dateObj of dates) {
const date = dateObj.toISOString();
if (!eventMap[date]) {
const regroupedEvent: Calendar_Contracts.CalendarEvent = {
startDate: date,
endDate: date,
member: event.member,
title: "",
id: this.id + "." + date,
category: <Calendar_Contracts.IEventCategory>{
id: "",
title: "Grouped Event",
color: this._categoryColor,
},
icons: [],
};
eventMap[date] = regroupedEvent;
renderedEvents.push(regroupedEvent);
}
eventMap[date].icons.push(event.icons[0]);
}
}
}
}
return renderedEvents;
});
}
return Promise.all(iterationTeamDaysOffPromises).then(() => {
return Promise.all(capacityPromises).then(() => {
this._events = events;
this._renderedEvents = renderedEvents;
return renderedEvents;
});
});
});
}