Browse Source

chore(invite-members): add logging for new invite modal (#78706)

we want to add logging to be able to tell how many Send button clicks
came from the new invite modal vs. the old design

this will help us later with calculating the average number of invites
sent per button click
mia hsu 5 months ago
parent
commit
144d2f0c05

+ 20 - 8
static/app/components/modals/inviteMembersModal/useInviteModal.tsx

@@ -181,22 +181,34 @@ export default function useInviteModal({organization, initialData, source}: Prop
     });
   }, []);
 
-  const sendInvites = useCallback(async () => {
-    setState(prev => ({...prev, sendingInvites: true}));
-    await Promise.all(invites.map(sendInvite));
-    if (organization.features.includes('invite-members-new-modal')) {
-      removeSentInvites();
+  useEffect(() => {
+    const statuses = Object.values(state.inviteStatus) as InviteStatus[];
+    const sentCount = statuses.filter(i => i.sent).length;
+    const errorCount = statuses.filter(i => i.error).length;
+    // Don't track if no invites have been sent or invites are still sending
+    if ((sentCount === 0 && errorCount === 0) || state.sendingInvites) {
+      return;
     }
-    setState(prev => ({...prev, sendingInvites: false, complete: true}));
-
     trackAnalytics(
       willInvite ? 'invite_modal.invites_sent' : 'invite_modal.requests_sent',
       {
         organization,
         modal_session: sessionId.current,
+        sent_invites: sentCount,
+        failed_invites: errorCount,
+        is_new_modal: organization.features.includes('invite-members-new-modal'),
       }
     );
-  }, [organization, invites, sendInvite, willInvite, removeSentInvites]);
+  }, [organization, state.inviteStatus, state.sendingInvites, willInvite]);
+
+  const sendInvites = useCallback(async () => {
+    setState(prev => ({...prev, sendingInvites: true}));
+    await Promise.all(invites.map(sendInvite));
+    if (organization.features.includes('invite-members-new-modal')) {
+      removeSentInvites();
+    }
+    setState(prev => ({...prev, sendingInvites: false, complete: true}));
+  }, [organization, invites, sendInvite, removeSentInvites]);
 
   const addInviteRow = useCallback(() => {
     setState(prev => ({

+ 5 - 1
static/app/utils/analytics/growthAnalyticsEvents.tsx

@@ -119,7 +119,11 @@ export type GrowthEventParameters = {
   'growth.submitted_mobile_prompt_ask_teammate': MobilePromptBannerParams;
   'invite_modal.add_more': InviteModal;
   'invite_modal.closed': InviteModal;
-  'invite_modal.invites_sent': InviteModal;
+  'invite_modal.invites_sent': InviteModal & {
+    failed_invites: number;
+    is_new_modal: boolean;
+    sent_invites: number;
+  };
   'invite_modal.opened': InviteModal & {
     can_invite: boolean;
     source?: string;