"use client"; import { FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useZodForm } from "@/components/ui/form"; import {Input} from "@/components/ui/input"; import {Form} from "@/components/ui/form"; import {Button} from "@/components/ui/button"; import {useMutation} from "@tanstack/react-query"; import {Tooltip, TooltipContent, TooltipProvider, TooltipTrigger} from "@/components/ui/tooltip"; import { EmailFormSchema, EmailFormType } from "@/features/settings/email-form.schema"; import {PasswordInput} from "@/components/ui/password-input"; import { updateEmailSettingsAction } from "@/features/settings/email-form.action"; import {toast} from "sonner"; import {useRouter} from "next/navigation"; import {sendEmail} from "@/lib/email"; import {render} from "@react-email/components"; import EmailSettingsTest from "@/components/emails/email-settings-test"; import {ButtonWithLoading} from "@/components/common/button-with-loading"; import {Send} from "lucide-react"; import {Switch} from "@/components/ui/switch"; export type EmailFormProps = { defaultValues?: EmailFormType; }; export const EmailForm = (props: EmailFormProps) => { const form = useZodForm({ schema: EmailFormSchema, defaultValues: props.defaultValues, }); const isDirty = form.formState.isDirty; const router = useRouter(); const mutation = useMutation({ mutationFn: async (values: EmailFormType) => { const updateEmailSettings = await updateEmailSettingsAction({name: "system", data: values}); const data = updateEmailSettings?.data?.data; if (updateEmailSettings?.serverError || !data) { toast.error(updateEmailSettings?.serverError); return; } toast.success(`Success updating email informations`); form.reset(data); router.refresh(); }, }); const mutationSendEmailTest = useMutation({ mutationFn: async () => { if (!props.defaultValues?.smtpUser || !props.defaultValues?.smtpFrom) { toast.error("SMTP is not configured"); return; } try { const email = await sendEmail({ to: props.defaultValues.smtpUser, subject: "Portabase", html: await render(EmailSettingsTest(), {}), from: props.defaultValues.smtpFrom, }); if (email?.response) { toast.success("Test Email successfully sent!"); } return email; } catch (error: unknown) { if (error instanceof Error) { toast.error(`Email sending failed: ${error.message}`); } else { toast.error("Unknown error while sending test email"); } throw error; } }, }); return (
{ await mutation.mutateAsync(values); }} > ( From Email * {"The email from where the email will be send"} )} /> ( Server Host * {"Your email server host"} )} /> ( Server Port * {"Your email server port (send)"} )} /> ( Password {"Your email server password"} )} /> ( User Email * {"The email server user"} )} /> ( Secure )} />
{props.defaultValues?.smtpFrom && (
{ await mutationSendEmailTest.mutateAsync(); }} icon={} size="default" className="bg-green-600 hover:bg-green-700 text-white font-medium shadow-sm transition-all" > Send email test
{isDirty && ( You must save changes before testing the email settings. )}
)}
); };