Skip to content

Commit f3caeca

Browse files
committed
display email send result
1 parent 7b5bc7d commit f3caeca

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

app/email/page.tsx

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use client"
22
import React, { useEffect, useMemo, useState } from "react"
3-
import { MailService } from "@/generated"
3+
import { MailService, MailBulkSendResult } from "@/generated"
44
import { handleError } from "@/util/api-client"
55
import 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>

app/email/style.module.scss

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@
107107
align-items: center;
108108
gap: 12px;
109109
margin-top: 16px;
110+
flex-wrap: wrap;
110111

111112
.sendSelfBtn {
112113
@include button;
@@ -119,5 +120,17 @@
119120
.sendAttendeesBtn {
120121
@include button($red);
121122
}
123+
124+
.resultInfo {
125+
font-size: 0.95em;
126+
color: #444;
127+
128+
.errorList {
129+
margin: 4px 0 0 20px;
130+
padding: 0;
131+
color: $red;
132+
font-size: 0.9em;
133+
}
134+
}
122135
}
123136
}

0 commit comments

Comments
 (0)