You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.2 KiB
TypeScript

"use server";
import { getI18n, getLocalizedI18n } from "@/i18n/server";
import { contactSchema } from "@/types/contact";
import { getPayload } from "@/utils/payload";
import { getSettings } from "@/api";
import { renderContactConfirmationEmail } from "@/emails/contact-confirmation";
import { renderContactEmail } from "@/emails/contact";
export const submitContactFormAction = async (_: any, formData: FormData) => {
const { success, error, data } = contactSchema.safeParse(Object.fromEntries(formData));
if (!success) {
return { success, error: error.flatten().fieldErrors };
}
const payload = await getPayload();
const { adminLanguage, contactEmailsTo } = await getSettings();
const [t, reset] = await getLocalizedI18n(adminLanguage);
try {
let res = await payload.sendEmail({
to: contactEmailsTo,
subject: t("email.contactSubject", { name: data.name }),
email: await renderContactEmail({
t,
...data,
}),
});
res = await payload.sendEmail({
to: data.email,
subject: t("email.contactConfirmationSubject"),
email: await renderContactConfirmationEmail({
t,
...data,
}),
});
} finally {
reset();
}
return { success: true };
};