From fa11e10bcb67bf27be5b191b62b128b1fb08ced2 Mon Sep 17 00:00:00 2001 From: Eunjae Lee Date: Mon, 30 Jun 2025 14:28:54 +0200 Subject: [PATCH] feat: remove 3-attendee limitation from CSV export (#22092) Co-authored-by: eunjae@cal.com Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- packages/features/insights/server/events.ts | 54 +++++++++++++++------ 1 file changed, 38 insertions(+), 16 deletions(-) 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"))), }; });