'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 { DOCUMENT_AUTH_TYPES } from '@documenso/lib/constants/document-auth'; import { DEFAULT_DOCUMENT_TIME_ZONE, TIME_ZONES } from '@documenso/lib/constants/time-zones'; import { DocumentAccessAuth, DocumentActionAuth } from '@documenso/lib/types/document-auth'; import { extractDocumentAuthMethods } from '@documenso/lib/utils/document-auth'; import { DocumentStatus, type Field, type Recipient, 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 { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@documenso/ui/primitives/form/form'; import { Combobox } from '../combobox'; import { Input } from '../input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../select'; import { useStep } from '../stepper'; import { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip'; import type { TAddSettingsFormSchema } from './add-settings.types'; import { ZAddSettingsFormSchema } from './add-settings.types'; import { DocumentFlowFormContainerActions, DocumentFlowFormContainerContent, DocumentFlowFormContainerFooter, DocumentFlowFormContainerHeader, DocumentFlowFormContainerStep, } from './document-flow-root'; import { ShowFieldItem } from './show-field-item'; import type { DocumentFlowStep } from './types'; export type AddSettingsFormProps = { documentFlow: DocumentFlowStep; recipients: Recipient[]; fields: Field[]; isDocumentEnterprise: boolean; isDocumentPdfLoaded: boolean; document: DocumentWithData; onSubmit: (_data: TAddSettingsFormSchema) => void; }; export const AddSettingsFormPartial = ({ documentFlow, recipients, fields, isDocumentEnterprise, isDocumentPdfLoaded, document, onSubmit, }: AddSettingsFormProps) => { const { documentAuthOption } = extractDocumentAuthMethods({ documentAuth: document.authOptions, }); const form = useForm({ resolver: zodResolver(ZAddSettingsFormSchema), defaultValues: { title: document.title, globalAccessAuth: documentAuthOption?.globalAccessAuth || undefined, globalActionAuth: documentAuthOption?.globalActionAuth || undefined, meta: { timezone: document.documentMeta?.timezone ?? DEFAULT_DOCUMENT_TIME_ZONE, dateFormat: document.documentMeta?.dateFormat ?? DEFAULT_DOCUMENT_DATE_FORMAT, redirectUrl: document.documentMeta?.redirectUrl ?? '', }, }, }); const { stepIndex, currentStep, totalSteps, previousStep } = useStep(); 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 (!form.formState.touchedFields.meta?.timezone && !documentHasBeenSent) { form.setValue('meta.timezone', Intl.DateTimeFormat().resolvedOptions().timeZone); } }, [documentHasBeenSent, form, form.setValue, form.formState.touchedFields.meta?.timezone]); return ( <> {isDocumentPdfLoaded && fields.map((field, index) => ( ))}
( Title )} /> ( Document access

Document access

The authentication required for recipients to view the document.

  • Require account - The recipient must be signed in to view the document
  • None - The document can be accessed directly by the URL sent to the recipient
)} /> {isDocumentEnterprise && ( ( Recipient action authentication

Global recipient action authentication

The authentication required for recipients to sign the signature field.

This can be overriden by setting the authentication requirements directly on each recipient in the next step.

  • Require account - The recipient must be signed in
  • Require passkey - The recipient must have an account and passkey configured via their settings
  • Require 2FA - The recipient must have an account and 2FA enabled via their settings
  • None - No authentication required
)} /> )} Advanced Options
( Date Format )} /> ( Time Zone value && field.onChange(value)} disabled={documentHasBeenSent} /> )} /> ( Redirect URL{' '} Add a URL to redirect the user to once the document is signed )} />
); };