'use client'; import { useEffect } from 'react'; import { zodResolver } from '@hookform/resolvers/zod'; import { Trans } from '@lingui/macro'; import { useLingui } from '@lingui/react'; import { InfoIcon } from 'lucide-react'; import { useForm } from 'react-hook-form'; import { DATE_FORMATS, DEFAULT_DOCUMENT_DATE_FORMAT } from '@documenso/lib/constants/date-formats'; import { DEFAULT_DOCUMENT_TIME_ZONE, TIME_ZONES } from '@documenso/lib/constants/time-zones'; import { extractDocumentAuthMethods } from '@documenso/lib/utils/document-auth'; import { type Field, type Recipient } from '@documenso/prisma/client'; import type { TemplateWithData } from '@documenso/prisma/types/template'; import { DocumentGlobalAuthAccessSelect, DocumentGlobalAuthAccessTooltip, } from '@documenso/ui/components/document/document-global-auth-access-select'; import { DocumentGlobalAuthActionSelect, DocumentGlobalAuthActionTooltip, } from '@documenso/ui/components/document/document-global-auth-action-select'; import { DocumentSendEmailMessageHelper } from '@documenso/ui/components/document/document-send-email-message-helper'; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from '@documenso/ui/primitives/accordion'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@documenso/ui/primitives/form/form'; import { Combobox } from '../combobox'; import { DocumentFlowFormContainerActions, DocumentFlowFormContainerContent, DocumentFlowFormContainerFooter, DocumentFlowFormContainerHeader, DocumentFlowFormContainerStep, } from '../document-flow/document-flow-root'; import { ShowFieldItem } from '../document-flow/show-field-item'; import type { DocumentFlowStep } from '../document-flow/types'; import { Input } from '../input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../select'; import { useStep } from '../stepper'; import { Textarea } from '../textarea'; import { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip'; import type { TAddTemplateSettingsFormSchema } from './add-template-settings.types'; import { ZAddTemplateSettingsFormSchema } from './add-template-settings.types'; export type AddTemplateSettingsFormProps = { documentFlow: DocumentFlowStep; recipients: Recipient[]; fields: Field[]; isEnterprise: boolean; isDocumentPdfLoaded: boolean; template: TemplateWithData; onSubmit: (_data: TAddTemplateSettingsFormSchema) => void; }; export const AddTemplateSettingsFormPartial = ({ documentFlow, recipients, fields, isEnterprise, isDocumentPdfLoaded, template, onSubmit, }: AddTemplateSettingsFormProps) => { const { _ } = useLingui(); const { documentAuthOption } = extractDocumentAuthMethods({ documentAuth: template.authOptions, }); const form = useForm({ resolver: zodResolver(ZAddTemplateSettingsFormSchema), defaultValues: { title: template.title, externalId: template.externalId || undefined, globalAccessAuth: documentAuthOption?.globalAccessAuth || undefined, globalActionAuth: documentAuthOption?.globalActionAuth || undefined, meta: { subject: template.templateMeta?.subject ?? '', message: template.templateMeta?.message ?? '', timezone: template.templateMeta?.timezone ?? DEFAULT_DOCUMENT_TIME_ZONE, dateFormat: template.templateMeta?.dateFormat ?? DEFAULT_DOCUMENT_DATE_FORMAT, redirectUrl: template.templateMeta?.redirectUrl ?? '', }, }, }); const { stepIndex, currentStep, totalSteps, previousStep } = useStep(); // We almost always want to set the timezone to the user's local timezone to avoid confusion // when the document is signed. useEffect(() => { if (!form.formState.touchedFields.meta?.timezone) { form.setValue('meta.timezone', Intl.DateTimeFormat().resolvedOptions().timeZone); } }, [form, form.setValue, form.formState.touchedFields.meta?.timezone]); return ( <> {isDocumentPdfLoaded && fields.map((field, index) => ( ))}
( Template title )} /> ( Document access )} /> {isEnterprise && ( ( Recipient action authentication )} /> )} Email Options
( Subject (Optional) )} /> ( Message (Optional)