Skip to content

Commit 072cacc

Browse files
authored
Merge pull request #94 from techulus/fix/member-invite-errors
Show member invite validation errors
2 parents 972dfaf + 97d4638 commit 072cacc

2 files changed

Lines changed: 21 additions & 6 deletions

File tree

‎web/actions/members.ts‎

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,15 @@ export async function inviteMember(input: {
139139
}) {
140140
const session = await requireAdminSession();
141141

142-
const parsed = inviteMemberSchema.parse(input);
143-
const email = parsed.email.toLowerCase();
142+
const parsed = inviteMemberSchema.safeParse(input);
143+
if (!parsed.success) {
144+
return {
145+
success: false as const,
146+
error: parsed.error.issues[0]?.message ?? "Invalid invitation details",
147+
};
148+
}
149+
150+
const email = parsed.data.email.toLowerCase();
144151

145152
const existingUser = await db
146153
.select({ id: user.id })
@@ -149,7 +156,10 @@ export async function inviteMember(input: {
149156
.limit(1);
150157

151158
if (existingUser.length > 0) {
152-
throw new Error("A member with this email already exists");
159+
return {
160+
success: false as const,
161+
error: "A member with this email already exists",
162+
};
153163
}
154164

155165
await db
@@ -186,7 +196,7 @@ export async function inviteMember(input: {
186196
await db.insert(memberInvitations).values({
187197
id: randomUUID(),
188198
email,
189-
role: parsed.role,
199+
role: parsed.data.role,
190200
tokenHash: hashInviteToken(token),
191201
status: "pending",
192202
invitedByUserId: session.user.id,
@@ -196,12 +206,12 @@ export async function inviteMember(input: {
196206
const emailSent = await sendMemberInviteEmail({
197207
to: email,
198208
inviterName: session.user.name,
199-
role: parsed.role,
209+
role: parsed.data.role,
200210
inviteUrl,
201211
});
202212

203213
revalidatePath("/dashboard/settings");
204-
return { success: true, inviteUrl, emailSent };
214+
return { success: true as const, inviteUrl, emailSent };
205215
}
206216

207217
export async function revokeInvitation(invitationId: string) {

‎web/components/settings/member-settings.tsx‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ export function MemberSettings({ initialMembers, initialInvitations }: Props) {
7878
setIsInviting(true);
7979
try {
8080
const result = await inviteMember({ email, role });
81+
if (!result.success) {
82+
toast.error(result.error);
83+
return;
84+
}
85+
8186
setEmail("");
8287
toast.success(
8388
result.emailSent ? "Invitation sent" : "Invitation created",

0 commit comments

Comments
 (0)