Skip to content

Commit

Permalink
integrate resend
Browse files Browse the repository at this point in the history
  • Loading branch information
sajadevo committed Jan 3, 2025
1 parent e65dadc commit 1a42a76
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 21 deletions.
35 changes: 17 additions & 18 deletions app/components/contact.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ import { z } from "zod";
import { cn } from "@/lib/utils";
import { zodResolver } from "@hookform/resolvers/zod";

// @actions
import { sendInquiry } from "@/lib/actions";

const formSchema = z.object({
name: z.string().min(3, {
message: "Name must be at least 3 characters long",
Expand Down Expand Up @@ -47,26 +50,22 @@ export function Contact() {
async function onSubmit(values: z.infer<typeof formSchema>) {
setIsLoading(true);

const formData = new FormData();

formData.append("name", values.name);
formData.append("email", values.email);
formData.append("message", values.message);
const response = await sendInquiry(values);

// if (response.status === 200) {
// reset();
// setError(null);
// setIsSuccess(true);
// setIsLoading(false);
if (response.sent) {
reset();
setError(null);
setIsSuccess(true);
setIsLoading(false);

// setTimeout(() => {
// setIsSuccess(false);
// }, 3000);
// } else {
// setIsLoading(false);
// setIsSuccess(false);
// setError(response.message);
// }
setTimeout(() => {
setIsSuccess(false);
}, 3000);
} else {
setIsLoading(false);
setIsSuccess(false);
setError("Could not send message. Please try again later.");
}
}

return (
Expand Down
17 changes: 17 additions & 0 deletions components/email-template.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
export function EmailTemplate({
name,
email,
message,
}: {
name: string;
email: string;
message: string;
}) {
return (
<div>
<p>Name: {name}</p>
<p>Email: {email}</p>
<p>Message: {message}</p>
</div>
);
}
36 changes: 36 additions & 0 deletions lib/actions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
"use server";

// @components
import { EmailTemplate } from "@/components/email-template";

// @utils
import { Resend } from "resend";

const resend = new Resend(process.env.RESEND_API_KEY);

export async function sendInquiry({
name,
email,
message,
}: {
name: string;
email: string;
message: string;
}) {
try {
const { error } = await resend.emails.send({
from: process.env.RESEND_FROM_EMAIL!,
to: [process.env.RESEND_TO_EMAIL!],
subject: "New Inquiry from sajadevo.com",
react: EmailTemplate({ name, email, message }),
});

if (error) {
return { error: error.message, sent: false };
}

return { error: null, sent: true };
} catch (error: any) {
throw new Error(error.message);
}
}
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
},
"dependencies": {
"@hookform/resolvers": "3.9.1",
"@radix-ui/react-tooltip": "^1.1.6",
"@radix-ui/react-tooltip": "1.1.6",
"@tailwindcss/postcss": "next",
"clsx": "2.1.1",
"lucide-react": "0.469.0",
Expand All @@ -24,6 +24,7 @@
"react-dom": "19.0.0",
"react-fast-marquee": "1.6.5",
"react-hook-form": "7.54.1",
"resend": "4.0.1",
"tailwind-merge": "2.5.5",
"zod": "3.24.1"
},
Expand Down
3 changes: 1 addition & 2 deletions tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@
}
],
"paths": {
"@/*": ["./*"],
"@payload-config": ["./payload.config.ts"]
"@/*": ["./*"]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
Expand Down

0 comments on commit 1a42a76

Please sign in to comment.