diff --git a/packages/features/insights/server/events.ts b/packages/features/insights/server/events.ts index f32d86903e..061fb9068d 100644 --- a/packages/features/insights/server/events.ts +++ b/packages/features/insights/server/events.ts @@ -484,16 +484,34 @@ class EventsInsights { : booking.attendees; const formattedAttendees = attendeeList - .slice(0, 3) - .map((attendee) => (attendee ? `${attendee.name} (${attendee.email})` : null)); + .map((attendee) => (attendee ? `${attendee.name} (${attendee.email})` : null)) + .filter(Boolean); return [ booking.uid, + { attendeeList: formattedAttendees, noShowGuest: attendeeList[0]?.noShow || false }, + ]; + }) + ); + + const maxAttendees = Math.max( + ...Array.from(bookingMap.values()).map((data) => data.attendeeList.length), + 0 + ); + + const finalBookingMap = new Map( + Array.from(bookingMap.entries()).map(([uid, data]) => { + const attendeeFields: Record = {}; + + for (let i = 1; i <= maxAttendees; i++) { + attendeeFields[`attendee${i}`] = data.attendeeList[i - 1] || null; + } + + return [ + uid, { - noShowGuest: attendeeList[0]?.noShow || false, - attendee1: formattedAttendees[0] || null, - attendee2: formattedAttendees[1] || null, - attendee3: formattedAttendees[2] || null, + noShowGuest: data.noShowGuest, + ...attendeeFields, }, ]; }) @@ -502,33 +520,37 @@ class EventsInsights { const data = csvData.map((bookingTimeStatus) => { if (!bookingTimeStatus.uid) { // should not be reached because we filtered above + const nullAttendeeFields: Record = {}; + for (let i = 1; i <= maxAttendees; i++) { + nullAttendeeFields[`attendee${i}`] = null; + } + return { ...bookingTimeStatus, noShowGuest: false, - attendee1: null, - attendee2: null, - attendee3: null, + ...nullAttendeeFields, }; } - const attendeeData = bookingMap.get(bookingTimeStatus.uid); + const attendeeData = finalBookingMap.get(bookingTimeStatus.uid); if (!attendeeData) { + const nullAttendeeFields: Record = {}; + for (let i = 1; i <= maxAttendees; i++) { + nullAttendeeFields[`attendee${i}`] = null; + } + return { ...bookingTimeStatus, noShowGuest: false, - attendee1: null, - attendee2: null, - attendee3: null, + ...nullAttendeeFields, }; } return { ...bookingTimeStatus, noShowGuest: attendeeData.noShowGuest, - attendee1: attendeeData.attendee1, - attendee2: attendeeData.attendee2, - attendee3: attendeeData.attendee3, + ...Object.fromEntries(Object.entries(attendeeData).filter(([key]) => key.startsWith("attendee"))), }; });