'use client'; import { useEffect } from 'react'; import { zodResolver } from '@hookform/resolvers/zod'; 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 type { Template, TemplateDocumentMeta } from '@documenso/prisma/client'; import { type Recipient, SendStatus } from '@documenso/prisma/client'; 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, DocumentFlowFormContainerStep, } from '../document-flow/document-flow-root'; 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 { TTemplateSettingsFormSchema } from './add-template-settings.types'; import { ZTemplateSettingsFormSchema } from './add-template-settings.types'; export type AddSettingsFormProps = { template: Template; documentFlow: DocumentFlowStep; recipients: Recipient[]; documentMeta: TemplateDocumentMeta | null; onSubmit: (_data: TTemplateSettingsFormSchema) => void; }; export const AddTemplateSettingsFormPartial = ({ documentFlow, recipients, documentMeta, template, onSubmit, }: AddSettingsFormProps) => { const form = useForm({ resolver: zodResolver(ZTemplateSettingsFormSchema), defaultValues: { title: template.title, meta: { subject: documentMeta?.subject ?? '', message: documentMeta?.message ?? '', timezone: documentMeta?.timezone ?? DEFAULT_DOCUMENT_TIME_ZONE, dateFormat: documentMeta?.dateFormat ?? DEFAULT_DOCUMENT_DATE_FORMAT, redirectUrl: documentMeta?.redirectUrl ?? '', }, }, }); const { stepIndex, currentStep, totalSteps, previousStep } = useStep(); const documentHasBeenSent = recipients.some( (recipient) => recipient.sendStatus === SendStatus.SENT, ); useEffect(() => { if (!form.formState.touchedFields.meta?.timezone && !documentHasBeenSent) { form.setValue('meta.timezone', Intl.DateTimeFormat().resolvedOptions().timeZone); } }, [documentHasBeenSent, form, form.setValue, form.formState.touchedFields.meta?.timezone]); return ( <>
( Title )} /> Advanced Options
( Date Format )} /> ( Subject{' '} Add email subject )} /> ( Message{' '} Add message to send in the email