public getEvents()

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