import { zodResolver } from '@hookform/resolvers/zod'; import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react'; import { Trans } from '@lingui/react/macro'; import type { Field, Recipient } from '@prisma/client'; import { DocumentDistributionMethod, DocumentStatus, RecipientRole } from '@prisma/client'; import { AnimatePresence, motion } from 'framer-motion'; import { useForm } from 'react-hook-form'; import { RECIPIENT_ROLES_DESCRIPTION } from '@documenso/lib/constants/recipient-roles'; import type { TDocument } from '@documenso/lib/types/document'; import { ZDocumentEmailSettingsSchema } from '@documenso/lib/types/document-email'; import { formatSigningLink } from '@documenso/lib/utils/recipients'; import { DocumentSendEmailMessageHelper } from '@documenso/ui/components/document/document-send-email-message-helper'; import { Tabs, TabsList, TabsTrigger } from '@documenso/ui/primitives/tabs'; import { CopyTextButton } from '../../components/common/copy-text-button'; import { DocumentEmailCheckboxes } from '../../components/document/document-email-checkboxes'; import { AvatarWithText } from '../avatar'; import { FormErrorMessage } from '../form/form-error-message'; import { Input } from '../input'; import { Label } from '../label'; import { useStep } from '../stepper'; import { Textarea } from '../textarea'; import { toast } from '../use-toast'; 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: TDocument; onSubmit: (_data: TAddSubjectFormSchema) => void; isDocumentPdfLoaded: boolean; }; export const AddSubjectFormPartial = ({ documentFlow, recipients: recipients, fields: fields, document, onSubmit, isDocumentPdfLoaded, }: AddSubjectFormProps) => { const { _ } = useLingui(); const { register, handleSubmit, setValue, watch, formState: { errors, isSubmitting }, } = useForm({ defaultValues: { meta: { subject: document.documentMeta?.subject ?? '', message: document.documentMeta?.message ?? '', distributionMethod: document.documentMeta?.distributionMethod || DocumentDistributionMethod.EMAIL, emailSettings: ZDocumentEmailSettingsSchema.parse(document?.documentMeta?.emailSettings), }, }, resolver: zodResolver(ZAddSubjectFormSchema), }); const GoNextLabel = { [DocumentDistributionMethod.EMAIL]: { [DocumentStatus.DRAFT]: msg`Send`, [DocumentStatus.PENDING]: recipients.some((recipient) => recipient.sendStatus === 'SENT') ? msg`Resend` : msg`Send`, [DocumentStatus.COMPLETED]: msg`Update`, }, [DocumentDistributionMethod.NONE]: { [DocumentStatus.DRAFT]: msg`Generate Links`, [DocumentStatus.PENDING]: msg`View Document`, [DocumentStatus.COMPLETED]: msg`View Document`, }, }; const distributionMethod = watch('meta.distributionMethod'); const emailSettings = watch('meta.emailSettings'); const onFormSubmit = handleSubmit(onSubmit); const { currentStep, totalSteps, previousStep } = useStep(); return ( <>
{isDocumentPdfLoaded && fields.map((field, index) => ( ))} // eslint-disable-next-line @typescript-eslint/consistent-type-assertions setValue('meta.distributionMethod', value as DocumentDistributionMethod) } value={distributionMethod} className="mb-2" > Email None {distributionMethod === DocumentDistributionMethod.EMAIL && (