'use client'; import { useMemo, useState } from 'react'; import { useRouter } from 'next/navigation'; import { useForm } from 'react-hook-form'; import { completeDocumentWithToken } from '@documenso/lib/server-only/document/complete-document-with-token'; import { sortFieldsByPosition, validateFieldsInserted } from '@documenso/lib/utils/fields'; import { Document, Field, Recipient } from '@documenso/prisma/client'; import { FieldToolTip } from '@documenso/ui/components/field/field-tooltip'; import { cn } from '@documenso/ui/lib/utils'; import { Button } from '@documenso/ui/primitives/button'; import { Card, CardContent } from '@documenso/ui/primitives/card'; import { Input } from '@documenso/ui/primitives/input'; import { Label } from '@documenso/ui/primitives/label'; import { SignaturePad } from '@documenso/ui/primitives/signature-pad'; import { useRequiredSigningContext } from './provider'; export type SigningFormProps = { document: Document; recipient: Recipient; fields: Field[]; }; export const SigningForm = ({ document, recipient, fields }: SigningFormProps) => { const router = useRouter(); const { fullName, signature, setFullName, setSignature } = useRequiredSigningContext(); const [validateUninsertedFields, setValidateUninsertedFields] = useState(false); const { handleSubmit, formState: { isSubmitting }, } = useForm(); const uninsertedFields = useMemo(() => { return sortFieldsByPosition(fields.filter((field) => !field.inserted)); }, [fields]); const onFormSubmit = async () => { setValidateUninsertedFields(true); const isFieldsValid = validateFieldsInserted(fields); if (!isFieldsValid) { return; } await completeDocumentWithToken({ token: recipient.token, documentId: document.id, }); router.push(`/sign/${recipient.token}/complete`); }; return (
); };