import { zodResolver } from '@hookform/resolvers/zod'; import { Trans } from '@lingui/react/macro'; import type { TeamGlobalSettings } from '@prisma/client'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; import { useCurrentOrganisation } from '@documenso/lib/client-only/providers/organisation'; import { FROM_ADDRESS } from '@documenso/lib/constants/email'; import { DEFAULT_DOCUMENT_EMAIL_SETTINGS, ZDocumentEmailSettingsSchema, } from '@documenso/lib/types/document-email'; import { trpc } from '@documenso/trpc/react'; import { DocumentEmailCheckboxes } from '@documenso/ui/components/document/document-email-checkboxes'; import { Button } from '@documenso/ui/primitives/button'; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from '@documenso/ui/primitives/form/form'; import { Input } from '@documenso/ui/primitives/input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@documenso/ui/primitives/select'; const ZEmailPreferencesFormSchema = z.object({ emailId: z.string().nullable(), emailReplyTo: z.string().email().nullable(), // emailReplyToName: z.string(), emailDocumentSettings: ZDocumentEmailSettingsSchema.nullable(), }); export type TEmailPreferencesFormSchema = z.infer; type SettingsSubset = Pick< TeamGlobalSettings, 'emailId' | 'emailReplyTo' | 'emailDocumentSettings' >; export type EmailPreferencesFormProps = { settings: SettingsSubset; canInherit: boolean; onFormSubmit: (data: TEmailPreferencesFormSchema) => Promise; }; export const EmailPreferencesForm = ({ settings, onFormSubmit, canInherit, }: EmailPreferencesFormProps) => { const organisation = useCurrentOrganisation(); const form = useForm({ defaultValues: { emailId: settings.emailId, emailReplyTo: settings.emailReplyTo, // emailReplyToName: settings.emailReplyToName, emailDocumentSettings: settings.emailDocumentSettings, }, resolver: zodResolver(ZEmailPreferencesFormSchema), }); const { data: emailData, isLoading: isLoadingEmails } = trpc.enterprise.organisation.email.find.useQuery({ organisationId: organisation.id, perPage: 100, }); const emails = emailData?.data || []; return (
{organisation.organisationClaim.flags.emailDomains && ( ( Default Email The default email to use when sending emails to recipients )} /> )} ( Reply to email field.onChange(value.target.value || null)} placeholder="noreply@example.com" type="email" /> The email address which will show up in the "Reply To" field in emails {canInherit && ( {'. '} Leave blank to inherit from the organisation. )} )} /> {/* ( Reply to name )} /> */} ( Default Email Settings {canInherit && ( )} {field.value && (
field.onChange(value)} />
)} Controls the default email settings when new documents or templates are created
)} />
); };