'use client'; import { useEffect } from 'react'; import { zodResolver } from '@hookform/resolvers/zod'; import { Info } from 'lucide-react'; import { Controller, 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 { Field, Recipient } from '@documenso/prisma/client'; import { DocumentStatus } from '@documenso/prisma/client'; import { SendStatus } from '@documenso/prisma/client'; import type { DocumentWithData } from '@documenso/prisma/types/document-with-data'; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from '@documenso/ui/primitives/accordion'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@documenso/ui/primitives/select'; import { Tooltip, TooltipContent, TooltipTrigger } from '@documenso/ui/primitives/tooltip'; import { Combobox } from '../combobox'; import { FormErrorMessage } from '../form/form-error-message'; import { Input } from '../input'; import { Label } from '../label'; import { useStep } from '../stepper'; import { Textarea } from '../textarea'; import { type TAddSubjectFormSchema, ZAddSubjectFormSchema } from './add-subject.types'; import { DocumentFlowFormContainerActions, DocumentFlowFormContainerContent, DocumentFlowFormContainerFooter, DocumentFlowFormContainerHeader, DocumentFlowFormContainerStep, } from './document-flow-root'; import { ShowFieldItem } from './show-field-item'; import type { DocumentFlowStep } from './types'; export type AddSubjectFormProps = { documentFlow: DocumentFlowStep; recipients: Recipient[]; fields: Field[]; document: DocumentWithData; onSubmit: (_data: TAddSubjectFormSchema) => void; isDocumentPdfLoaded: boolean; }; export const AddSubjectFormPartial = ({ documentFlow, recipients: recipients, fields: fields, document, onSubmit, isDocumentPdfLoaded, }: AddSubjectFormProps) => { const { control, register, handleSubmit, formState: { errors, isSubmitting, touchedFields }, setValue, } = useForm({ defaultValues: { meta: { subject: document.documentMeta?.subject ?? '', message: document.documentMeta?.message ?? '', timezone: document.documentMeta?.timezone ?? DEFAULT_DOCUMENT_TIME_ZONE, dateFormat: document.documentMeta?.dateFormat ?? DEFAULT_DOCUMENT_DATE_FORMAT, redirectUrl: document.documentMeta?.redirectUrl ?? '', }, }, resolver: zodResolver(ZAddSubjectFormSchema), }); const onFormSubmit = handleSubmit(onSubmit); const { currentStep, totalSteps, previousStep } = useStep(); const hasDateField = fields.find((field) => field.type === 'DATE'); const documentHasBeenSent = recipients.some( (recipient) => recipient.sendStatus === SendStatus.SENT, ); // We almost always want to set the timezone to the user's local timezone to avoid confusion // when the document is signed. useEffect(() => { if (!touchedFields.meta?.timezone && !documentHasBeenSent) { setValue('meta.timezone', Intl.DateTimeFormat().resolvedOptions().timeZone); } }, [documentHasBeenSent, setValue, touchedFields.meta?.timezone]); return ( <>
{isDocumentPdfLoaded && fields.map((field, index) => ( ))}