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
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 };
|
|
};
|