Skip to content

Commit f666733

Browse files
committed
Merge branch 'main' into fix-stripe-ux
2 parents 9497194 + 9aa2e58 commit f666733

File tree

14 files changed

+108
-237
lines changed

14 files changed

+108
-237
lines changed

src/app/(authenticated)/(dashboard)/[publicId]/settings/team/add-team-member-dropdown-menu.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@ export const AddTeamMemberDropdownMenu = () => {
3232
subtitle: "Invite a team member to your company.",
3333
member: {
3434
name: "",
35-
email: "",
35+
loginEmail: "",
3636
title: "",
37+
workEmail: "",
3738
},
3839
});
3940
}}

src/components/member/member-modal.tsx

Lines changed: 0 additions & 183 deletions
This file was deleted.

src/components/member/member-table.tsx

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@ import {
2929

3030
import { api } from "@/trpc/react";
3131

32-
import MemberModal from "@/components/member/member-modal";
3332
import { Avatar, AvatarImage } from "@/components/ui/avatar";
3433
import type { RouterOutputs } from "@/trpc/shared";
3534
import { RiMore2Fill } from "@remixicon/react";
3635
import { useSession } from "next-auth/react";
3736
import { useRouter } from "next/navigation";
37+
import { pushModal } from "../modals";
3838
import { DataTable } from "../ui/data-table/data-table";
3939
import { DataTableBody } from "../ui/data-table/data-table-body";
4040
import { SortButton } from "../ui/data-table/data-table-buttons";
@@ -171,7 +171,7 @@ export const columns: ColumnDef<Member[number]>[] = [
171171

172172
const status = member.status;
173173
const memberId = member.id;
174-
const email = member.user?.email;
174+
const email = member?.user?.email;
175175

176176
const isActive = status === "ACTIVE";
177177
const isPending = status === "PENDING";
@@ -226,21 +226,24 @@ export const columns: ColumnDef<Member[number]>[] = [
226226
)}
227227

228228
{status === "ACTIVE" && (
229-
<MemberModal
230-
isEditMode
231-
memberId={member.id}
232-
title="Update team member"
233-
subtitle="Update team member's account information."
234-
member={{
235-
name: member.user?.name ?? "",
236-
email: email ?? "",
237-
title: member.title ?? "",
229+
<DropdownMenuItem
230+
onClick={() => {
231+
pushModal("TeamMemberModal", {
232+
isEditMode: true,
233+
memberId,
234+
title: "Update team member",
235+
subtitle: "Update team member's account information.",
236+
member: {
237+
name: member.user.name ?? "",
238+
loginEmail: "",
239+
title: member.title ?? "",
240+
workEmail: member.workEmail ?? "",
241+
},
242+
});
238243
}}
239244
>
240-
<span className="relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50">
241-
Update member
242-
</span>
243-
</MemberModal>
245+
Update member
246+
</DropdownMenuItem>
244247
)}
245248

246249
<DropdownMenuSeparator />

src/components/modals/team-member/team-member-modal.tsx

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,25 @@ import { Input } from "@/components/ui/input";
1616
import { api } from "@/trpc/react";
1717
import { toast } from "sonner";
1818

19-
import {
20-
type TypeZodInviteMemberMutationSchema,
21-
ZodInviteMemberMutationSchema,
22-
} from "@/trpc/routers/member-router/schema";
23-
2419
import { popModal } from "@/components/modals";
2520
import { zodResolver } from "@hookform/resolvers/zod";
2621
import { useRouter } from "next/navigation";
2722
import { useForm } from "react-hook-form";
23+
import { z } from "zod";
24+
25+
const ZodTeamMemberSchema = z.object({
26+
name: z.string(),
27+
loginEmail: z.string(),
28+
workEmail: z.string(),
29+
title: z.string(),
30+
});
31+
32+
type TypeZodTeamMemberSchema = z.infer<typeof ZodTeamMemberSchema>;
2833

2934
type MemberModalType = {
3035
title: string;
3136
subtitle: string;
32-
member: TypeZodInviteMemberMutationSchema;
37+
member: TypeZodTeamMemberSchema;
3338
} & editModeType;
3439

3540
type editModeType =
@@ -42,11 +47,12 @@ export const TeamMemberModal = ({
4247
member,
4348
...rest
4449
}: MemberModalType) => {
50+
console.log({ rest });
4551
const router = useRouter();
4652
const inviteMember = api.member.inviteMember.useMutation({
4753
onSuccess: () => {
4854
popModal("TeamMemberModal");
49-
toast.success("You have successfully invited the stakeholder.");
55+
toast.success("You have successfully invited the member.");
5056
router.refresh();
5157
},
5258
onError: (error) => {
@@ -57,34 +63,43 @@ export const TeamMemberModal = ({
5763
const updateMember = api.member.updateMember.useMutation({
5864
onSuccess: () => {
5965
popModal("TeamMemberModal");
60-
toast.success("You have successfully updated the stakeholder.");
66+
toast.success("You have successfully updated the member.");
6167
router.refresh();
6268
},
6369
onError: (error) => {
6470
toast.error(error.message);
6571
},
6672
});
6773

68-
const form = useForm<TypeZodInviteMemberMutationSchema>({
69-
resolver: zodResolver(ZodInviteMemberMutationSchema),
74+
const form = useForm<TypeZodTeamMemberSchema>({
75+
resolver: zodResolver(ZodTeamMemberSchema),
7076
defaultValues: {
7177
name: member.name ?? "",
72-
email: member.email ?? "",
78+
loginEmail: member.loginEmail ?? "",
79+
workEmail: member.workEmail ?? "",
7380
title: member.title ?? "",
7481
},
7582
});
7683

7784
const isSubmitting = form.formState.isSubmitting;
7885

79-
const onSubmit = async (values: TypeZodInviteMemberMutationSchema) => {
86+
const onSubmit = async (values: TypeZodTeamMemberSchema) => {
87+
console.log({ values });
88+
const { name, title, workEmail, loginEmail } = values;
8089
try {
8190
if (rest.isEditMode) {
8291
await updateMember.mutateAsync({
83-
...values,
92+
name,
93+
title,
94+
workEmail,
8495
memberId: rest.memberId,
8596
});
8697
} else {
87-
await inviteMember.mutateAsync(values);
98+
await inviteMember.mutateAsync({
99+
name,
100+
title,
101+
email: loginEmail,
102+
});
88103
}
89104
// biome-ignore lint/suspicious/noEmptyBlockStatements: <explanation>
90105
} catch (error) {}
@@ -113,13 +128,15 @@ export const TeamMemberModal = ({
113128

114129
<FormField
115130
control={form.control}
116-
name="email"
131+
name={rest.isEditMode ? "workEmail" : "loginEmail"}
117132
render={({ field }) => (
118133
<FormItem>
119-
<FormLabel>Work email</FormLabel>
134+
<FormLabel>
135+
{rest.isEditMode ? "Work email" : "Login email"}
136+
</FormLabel>
120137
<FormControl>
121138
<Input
122-
disabled={isSubmitting || rest.isEditMode === true}
139+
disabled={isSubmitting || rest.isEditMode}
123140
type="email"
124141
{...field}
125142
/>

src/jobs/auth-verification-email.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,8 @@ export const sendAuthVerificationEmail = async (
1515
) => {
1616
const { email, token } = payload;
1717
const baseUrl = env.NEXT_PUBLIC_BASE_URL;
18-
1918
const confirmLink = `${baseUrl}/verify-email/${token}`;
2019

21-
console.log("Sending email to ", email, "with link ", confirmLink);
22-
2320
const html = await render(
2421
AccountVerificationEmail({
2522
verifyLink: confirmLink,

0 commit comments

Comments
 (0)