diff --git a/packages/app-store/exchange2013calendar/lib/CalendarService.ts b/packages/app-store/exchange2013calendar/lib/CalendarService.ts index ac00747b65..b0a2b4be6a 100644 --- a/packages/app-store/exchange2013calendar/lib/CalendarService.ts +++ b/packages/app-store/exchange2013calendar/lib/CalendarService.ts @@ -74,6 +74,12 @@ export default class ExchangeCalendarService implements Calendar { appointment.RequiredAttendees.Add(new Attendee(event.attendees[i].email)); } + if (event.team?.members) { + event.team.members.forEach((member) => { + appointment.RequiredAttendees.Add(new Attendee(member.email)); + }); + } + await appointment.Save(SendInvitationsMode.SendToAllAndSaveCopy); return { @@ -106,6 +112,11 @@ export default class ExchangeCalendarService implements Calendar { for (let i = 0; i < event.attendees.length; i++) { appointment.RequiredAttendees.Add(new Attendee(event.attendees[i].email)); } + if (event.team?.members) { + event.team.members.forEach((member) => { + appointment.RequiredAttendees.Add(new Attendee(member.email)); + }); + } appointment.Update( ConflictResolutionMode.AlwaysOverwrite, SendInvitationsOrCancellationsMode.SendToAllAndSaveCopy diff --git a/packages/app-store/exchange2016calendar/lib/CalendarService.ts b/packages/app-store/exchange2016calendar/lib/CalendarService.ts index 2c60e4fe64..3b96e59c85 100644 --- a/packages/app-store/exchange2016calendar/lib/CalendarService.ts +++ b/packages/app-store/exchange2016calendar/lib/CalendarService.ts @@ -75,6 +75,12 @@ export default class ExchangeCalendarService implements Calendar { appointment.RequiredAttendees.Add(new Attendee(event.attendees[i].email)); } + if (event.team?.members) { + event.team.members.forEach((member) => { + appointment.RequiredAttendees.Add(new Attendee(member.email)); + }); + } + await appointment.Save(SendInvitationsMode.SendToAllAndSaveCopy); return { @@ -106,6 +112,11 @@ export default class ExchangeCalendarService implements Calendar { for (let i = 0; i < event.attendees.length; i++) { appointment.RequiredAttendees.Add(new Attendee(event.attendees[i].email)); } + if (event.team?.members) { + event.team.members.forEach((member) => { + appointment.RequiredAttendees.Add(new Attendee(member.email)); + }); + } appointment.Update( ConflictResolutionMode.AlwaysOverwrite, SendInvitationsOrCancellationsMode.SendToAllAndSaveCopy diff --git a/packages/app-store/exchangecalendar/lib/CalendarService.ts b/packages/app-store/exchangecalendar/lib/CalendarService.ts index 9a93cd00fd..3b4e71f171 100644 --- a/packages/app-store/exchangecalendar/lib/CalendarService.ts +++ b/packages/app-store/exchangecalendar/lib/CalendarService.ts @@ -64,6 +64,11 @@ export default class ExchangeCalendarService implements Calendar { event.attendees.forEach((attendee: Person) => { appointment.RequiredAttendees.Add(new Attendee(attendee.email)); }); + if (event.team?.members) { + event.team.members.forEach((member: Person) => { + appointment.RequiredAttendees.Add(new Attendee(member.email)); + }); + } return appointment .Save(SendInvitationsMode.SendToAllAndSaveCopy) .then(() => { @@ -95,6 +100,11 @@ export default class ExchangeCalendarService implements Calendar { event.attendees.forEach((attendee: Person) => { appointment.RequiredAttendees.Add(new Attendee(attendee.email)); }); + if (event.team?.members) { + event.team.members.forEach((member) => { + appointment.RequiredAttendees.Add(new Attendee(member.email)); + }); + } return appointment .Update( ConflictResolutionMode.AlwaysOverwrite, diff --git a/packages/app-store/googlecalendar/lib/CalendarService.ts b/packages/app-store/googlecalendar/lib/CalendarService.ts index 509d45cb12..eca4c63a00 100644 --- a/packages/app-store/googlecalendar/lib/CalendarService.ts +++ b/packages/app-store/googlecalendar/lib/CalendarService.ts @@ -177,6 +177,12 @@ export default class GoogleCalendarService implements Calendar { ...rest, responseStatus: "accepted", })); + const teamMembers = + event.team?.members.map((m) => ({ + email: m.email, + displayName: m.name, + responseStatus: "accepted", + })) || []; const payload: calendar_v3.Schema$Event = { summary: event.title, description: getRichDescription(event), @@ -197,6 +203,7 @@ export default class GoogleCalendarService implements Calendar { }, // eslint-disable-next-line ...eventAttendees, + ...teamMembers, ], reminders: { useDefault: true, diff --git a/packages/app-store/larkcalendar/lib/CalendarService.ts b/packages/app-store/larkcalendar/lib/CalendarService.ts index e9ba925c24..61774563e1 100644 --- a/packages/app-store/larkcalendar/lib/CalendarService.ts +++ b/packages/app-store/larkcalendar/lib/CalendarService.ts @@ -377,16 +377,25 @@ export default class LarkCalendarService implements Calendar { }; private translateAttendees = (event: CalendarEvent): LarkEventAttendee[] => { - const attendees: LarkEventAttendee[] = event.attendees + const attendeeArray: LarkEventAttendee[] = []; + event.attendees .filter((att) => att.email) - .map((att) => { + .forEach((att) => { const attendee: LarkEventAttendee = { type: "third_party", is_optional: false, third_party_email: att.email, }; - return attendee; + attendeeArray.push(attendee); }); - return attendees; + event.team?.members.forEach((member) => { + const attendee: LarkEventAttendee = { + type: "third_party", + is_optional: false, + third_party_email: member.email, + }; + attendeeArray.push(attendee); + }); + return attendeeArray; }; } diff --git a/packages/app-store/office365calendar/lib/CalendarService.ts b/packages/app-store/office365calendar/lib/CalendarService.ts index 64dd723048..14bcdb8c6e 100644 --- a/packages/app-store/office365calendar/lib/CalendarService.ts +++ b/packages/app-store/office365calendar/lib/CalendarService.ts @@ -267,13 +267,24 @@ export default class Office365CalendarService implements Calendar { dateTime: dayjs(event.endTime).tz(event.organizer.timeZone).format("YYYY-MM-DDTHH:mm:ss"), timeZone: event.organizer.timeZone, }, - attendees: event.attendees.map((attendee) => ({ - emailAddress: { - address: attendee.email, - name: attendee.name, - }, - type: "required", - })), + attendees: [ + ...event.attendees.map((attendee) => ({ + emailAddress: { + address: attendee.email, + name: attendee.name, + }, + type: "required", + })), + ...(event.team?.members + ? event.team?.members.map((member) => ({ + emailAddress: { + address: member.email, + name: member.name, + }, + type: "required", + })) + : []), + ], location: event.location ? { displayName: getLocation(event) } : undefined, }; }; diff --git a/packages/lib/CalendarService.ts b/packages/lib/CalendarService.ts index 9d1a8316b6..222a4f511a 100644 --- a/packages/lib/CalendarService.ts +++ b/packages/lib/CalendarService.ts @@ -118,7 +118,10 @@ export default abstract class BaseCalendarService implements Calendar { description: getRichDescription(event), location: getLocation(event), organizer: { email: event.organizer.email, name: event.organizer.name }, - attendees: getAttendees(event.attendees), + attendees: [ + ...getAttendees(event.attendees), + ...(event.team?.members ? getAttendees(event.team.members) : []), + ], /** according to https://datatracker.ietf.org/doc/html/rfc2446#section-3.2.1, in a published iCalendar component. * "Attendees" MUST NOT be present * `attendees: this.getAttendees(event.attendees),` @@ -189,7 +192,10 @@ export default abstract class BaseCalendarService implements Calendar { description: getRichDescription(event), location: getLocation(event), organizer: { email: event.organizer.email, name: event.organizer.name }, - attendees: getAttendees(event.attendees), + attendees: [ + ...getAttendees(event.attendees), + ...(event.team?.members ? getAttendees(event.team.members) : []), + ], }); if (error) {