'use client'; import { useState } from 'react'; import { Trans } from '@lingui/macro'; import { match } from 'ts-pattern'; import { DEFAULT_DOCUMENT_DATE_FORMAT } from '@documenso/lib/constants/date-formats'; import { PDF_VIEWER_PAGE_SELECTOR } from '@documenso/lib/constants/pdf-viewer'; import { DEFAULT_DOCUMENT_TIME_ZONE } from '@documenso/lib/constants/time-zones'; import type { DocumentAndSender } from '@documenso/lib/server-only/document/get-document-by-token'; import { ZCheckboxFieldMeta, ZDropdownFieldMeta, ZNumberFieldMeta, ZRadioFieldMeta, ZTextFieldMeta, } from '@documenso/lib/types/field-meta'; import type { CompletedField } from '@documenso/lib/types/fields'; import type { Field } from '@documenso/prisma/client'; import { FieldType, RecipientRole } from '@documenso/prisma/client'; import type { FieldWithSignatureAndFieldMeta } from '@documenso/prisma/types/field-with-signature-and-fieldmeta'; import type { RecipientWithFields } from '@documenso/prisma/types/recipient-with-fields'; import { Card, CardContent } from '@documenso/ui/primitives/card'; import { ElementVisible } from '@documenso/ui/primitives/element-visible'; import { LazyPDFViewer } from '@documenso/ui/primitives/lazy-pdf-viewer'; import { DocumentReadOnlyFields } from '~/components/document/document-read-only-fields'; import { AutoSign } from './auto-sign'; import { CheckboxField } from './checkbox-field'; import { DateField } from './date-field'; import { DropdownField } from './dropdown-field'; import { EmailField } from './email-field'; import { SigningForm } from './form'; import { InitialsField } from './initials-field'; import { NameField } from './name-field'; import { NumberField } from './number-field'; import { RadioField } from './radio-field'; import { RecipientProvider } from './recipient-context'; import { RejectDocumentDialog } from './reject-document-dialog'; import { SignatureField } from './signature-field'; import { TextField } from './text-field'; export type SigningPageViewProps = { document: DocumentAndSender; recipient: RecipientWithFields; fields: Field[]; completedFields: CompletedField[]; isRecipientsTurn: boolean; allRecipients?: RecipientWithFields[]; }; export const SigningPageView = ({ document, recipient, fields, completedFields, isRecipientsTurn, allRecipients = [], }: SigningPageViewProps) => { const { documentData, documentMeta } = document; const [selectedSignerId, setSelectedSignerId] = useState(allRecipients?.[0]?.id); const shouldUseTeamDetails = document.teamId && document.team?.teamGlobalSettings?.includeSenderDetails === false; let senderName = document.user.name ?? ''; let senderEmail = `(${document.user.email})`; if (shouldUseTeamDetails) { senderName = document.team?.name ?? ''; senderEmail = document.team?.teamEmail?.email ? `(${document.team.teamEmail.email})` : ''; } const selectedSigner = allRecipients?.find((r) => r.id === selectedSignerId); return (

{document.title}

{senderName} {senderEmail} {' '} {match(recipient.role) .with(RecipientRole.VIEWER, () => document.teamId && !shouldUseTeamDetails ? ( on behalf of "{document.team?.name}" has invited you to view this document ) : ( has invited you to view this document ), ) .with(RecipientRole.SIGNER, () => document.teamId && !shouldUseTeamDetails ? ( on behalf of "{document.team?.name}" has invited you to sign this document ) : ( has invited you to sign this document ), ) .with(RecipientRole.APPROVER, () => document.teamId && !shouldUseTeamDetails ? ( on behalf of "{document.team?.name}" has invited you to approve this document ) : ( has invited you to approve this document ), ) .with(RecipientRole.ASSISTANT, () => document.teamId && !shouldUseTeamDetails ? ( on behalf of "{document.team?.name}" has invited you to assist this document ) : ( has invited you to assist this document ), ) .otherwise(() => null)}
{recipient.role !== RecipientRole.ASSISTANT && ( )} {fields .filter( (field) => recipient.role !== RecipientRole.ASSISTANT || field.recipientId === selectedSigner?.id, ) .map((field) => match(field.type) .with(FieldType.SIGNATURE, () => ( )) .with(FieldType.INITIALS, () => ) .with(FieldType.NAME, () => ) .with(FieldType.DATE, () => ( )) .with(FieldType.EMAIL, () => ) .with(FieldType.TEXT, () => { const fieldWithMeta: FieldWithSignatureAndFieldMeta = { ...field, fieldMeta: field.fieldMeta ? ZTextFieldMeta.parse(field.fieldMeta) : null, }; return ; }) .with(FieldType.NUMBER, () => { const fieldWithMeta: FieldWithSignatureAndFieldMeta = { ...field, fieldMeta: field.fieldMeta ? ZNumberFieldMeta.parse(field.fieldMeta) : null, }; return ; }) .with(FieldType.RADIO, () => { const fieldWithMeta: FieldWithSignatureAndFieldMeta = { ...field, fieldMeta: field.fieldMeta ? ZRadioFieldMeta.parse(field.fieldMeta) : null, }; return ; }) .with(FieldType.CHECKBOX, () => { const fieldWithMeta: FieldWithSignatureAndFieldMeta = { ...field, fieldMeta: field.fieldMeta ? ZCheckboxFieldMeta.parse(field.fieldMeta) : null, }; return ; }) .with(FieldType.DROPDOWN, () => { const fieldWithMeta: FieldWithSignatureAndFieldMeta = { ...field, fieldMeta: field.fieldMeta ? ZDropdownFieldMeta.parse(field.fieldMeta) : null, }; return ; }) .otherwise(() => null), )}
); };