11"use client"
22import React , { useEffect , useMemo , useState } from "react"
3- import { MailService } from "@/generated"
3+ import { MailService , MailBulkSendResult } from "@/generated"
44import { handleError } from "@/util/api-client"
55import styles from "./style.module.scss"
66
@@ -17,6 +17,7 @@ export default function Email() {
1717 const [ body , setBody ] = useState ( "" )
1818 const [ template , setTemplate ] = useState ( "" )
1919 const [ sendState , setSendState ] = useState < SendState > ( { status : "editing" } )
20+ const [ sendResult , setSendResult ] = useState < MailBulkSendResult | null > ( null )
2021
2122 const locked = sendState . status !== "editing" && sendState . status !== "error"
2223
@@ -59,7 +60,8 @@ export default function Email() {
5960 const result = await MailService . postMailSendAttendees ( {
6061 body : { subject, body } ,
6162 } )
62- handleError ( result )
63+ const data = handleError ( result )
64+ setSendResult ( data )
6365 setSendState ( { status : "sent-attendees" } )
6466 } catch ( err ) {
6567 setSendState ( {
@@ -71,6 +73,7 @@ export default function Email() {
7173
7274 const handleEdit = ( ) => {
7375 setSendState ( { status : "editing" } )
76+ setSendResult ( null )
7477 }
7578
7679 return (
@@ -149,10 +152,24 @@ export default function Email() {
149152 </ button >
150153 ) : sendState . status === "sent-attendees" ? (
151154 < >
152- < span className = { styles . successMessage } > Sent to all attendees!</ span >
153155 < button className = { styles . editBtn } onClick = { handleEdit } >
154156 Edit
155157 </ button >
158+ { sendResult && (
159+ < div className = { styles . resultInfo } >
160+ < span className = { sendResult . success ? styles . successMessage : styles . errorMessage } >
161+ { sendResult . success ? "Sent successfully" : "Completed with errors" }
162+ </ span >
163+ < span > — { sendResult . successCount } succeeded, { sendResult . failedCount } failed</ span >
164+ { sendResult . errors . length > 0 && (
165+ < ul className = { styles . errorList } >
166+ { sendResult . errors . map ( ( err , i ) => (
167+ < li key = { i } > { err } </ li >
168+ ) ) }
169+ </ ul >
170+ ) }
171+ </ div >
172+ ) }
156173 </ >
157174 ) : null }
158175 </ div >
0 commit comments