From eac874d6ae79c77c37c4c0087205ba594d31bc31 Mon Sep 17 00:00:00 2001 From: Dries Augustyns Date: Sun, 28 Sep 2025 11:52:49 +0200 Subject: [PATCH] Add stats to contact detail page --- .../dashboard/src/pages/contacts/[id].tsx | 42 ++++++++++++------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/packages/dashboard/src/pages/contacts/[id].tsx b/packages/dashboard/src/pages/contacts/[id].tsx index e58e2ec..e7f5cd6 100644 --- a/packages/dashboard/src/pages/contacts/[id].tsx +++ b/packages/dashboard/src/pages/contacts/[id].tsx @@ -101,6 +101,32 @@ export default function Index() { }); }, [dataReset, reset, contact]); + const emailStats = useMemo(() => { + if (!contact) { + return { + total: 0, + delivered: 0, + opened: 0, + bounced: 0, + complaint: 0, + }; + } + + const totalEmails = contact.emails.length; + const deliveredEmails = contact.emails.filter(email => email.status === 'DELIVERED').length; + const openedEmails = contact.emails.filter(email => email.status === 'OPENED').length; + const bouncedEmails = contact.emails.filter(email => email.status === 'BOUNCED').length; + const complaintEmails = contact.emails.filter(email => email.status === 'COMPLAINT').length; + + return { + total: totalEmails, + delivered: deliveredEmails, + opened: openedEmails, + bounced: bouncedEmails, + complaint: complaintEmails, + }; + }, [contact]); + if (!contact) { return ; } @@ -167,22 +193,6 @@ export default function Index() { await router.push("/contacts"); }; - const emailStats = useMemo(() => { - const totalEmails = contact.emails.length; - const deliveredEmails = contact.emails.filter(email => email.status === 'DELIVERED').length; - const openedEmails = contact.emails.filter(email => email.status === 'OPENED').length; - const bouncedEmails = contact.emails.filter(email => email.status === 'BOUNCED').length; - const complaintEmails = contact.emails.filter(email => email.status === 'COMPLAINT').length; - - return { - total: totalEmails, - delivered: deliveredEmails, - opened: openedEmails, - bounced: bouncedEmails, - complaint: complaintEmails, - }; - }, [contact.emails]); - return ( <>