'use client'; import React, { useId, useState } from 'react'; import { zodResolver } from '@hookform/resolvers/zod'; import { AnimatePresence, motion } from 'framer-motion'; import { Plus, Trash } from 'lucide-react'; import { Controller, useFieldArray, useForm } from 'react-hook-form'; import { nanoid } from '@documenso/lib/universal/id'; import { type Field, type Recipient, RecipientRole } from '@documenso/prisma/client'; import { Button } from '@documenso/ui/primitives/button'; import { FormErrorMessage } from '@documenso/ui/primitives/form/form-error-message'; import { Input } from '@documenso/ui/primitives/input'; import { Label } from '@documenso/ui/primitives/label'; import { DocumentFlowFormContainerActions, DocumentFlowFormContainerContent, DocumentFlowFormContainerFooter, DocumentFlowFormContainerStep, } from '../document-flow/document-flow-root'; import type { DocumentFlowStep } from '../document-flow/types'; import { ROLE_ICONS } from '../recipient-role-icons'; import { Select, SelectContent, SelectItem, SelectTrigger } from '../select'; import { useStep } from '../stepper'; import type { TAddTemplatePlacholderRecipientsFormSchema } from './add-template-placeholder-recipients.types'; import { ZAddTemplatePlacholderRecipientsFormSchema } from './add-template-placeholder-recipients.types'; export type AddTemplatePlaceholderRecipientsFormProps = { documentFlow: DocumentFlowStep; recipients: Recipient[]; fields: Field[]; onSubmit: (_data: TAddTemplatePlacholderRecipientsFormSchema) => void; }; export const AddTemplatePlaceholderRecipientsFormPartial = ({ documentFlow, recipients, fields: _fields, onSubmit, }: AddTemplatePlaceholderRecipientsFormProps) => { const initialId = useId(); const [placeholderRecipientCount, setPlaceholderRecipientCount] = useState(() => recipients.length > 1 ? recipients.length + 1 : 2, ); const { currentStep, totalSteps, previousStep } = useStep(); const { control, handleSubmit, formState: { errors, isSubmitting }, } = useForm({ resolver: zodResolver(ZAddTemplatePlacholderRecipientsFormSchema), defaultValues: { signers: recipients.length > 0 ? recipients.map((recipient) => ({ nativeId: recipient.id, formId: String(recipient.id), name: recipient.name, email: recipient.email, role: recipient.role, })) : [ { formId: initialId, name: `Recipient 1`, email: `recipient.1@documenso.com`, role: RecipientRole.SIGNER, }, ], }, }); const onFormSubmit = handleSubmit(onSubmit); const { append: appendSigner, fields: signers, remove: removeSigner, } = useFieldArray({ control, name: 'signers', }); const onAddPlaceholderRecipient = () => { appendSigner({ formId: nanoid(12), name: `Recipient ${placeholderRecipientCount}`, email: `recipient.${placeholderRecipientCount}@documenso.com`, role: RecipientRole.SIGNER, }); setPlaceholderRecipientCount((count) => count + 1); }; const onRemoveSigner = (index: number) => { removeSigner(index); }; return ( <>
{signers.map((signer, index) => (
( )} />
))}
1} onGoBackClick={() => previousStep()} onGoNextClick={() => void onFormSubmit()} /> ); };