import type { DocumentMeta, Recipient, TemplateMeta } from '@prisma/client'; import { type Field, FieldType } from '@prisma/client'; 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 { ZCheckboxFieldMeta, ZDropdownFieldMeta, ZNumberFieldMeta, ZRadioFieldMeta, ZTextFieldMeta, } from '@documenso/lib/types/field-meta'; import type { FieldWithSignatureAndFieldMeta } from '@documenso/prisma/types/field-with-signature-and-fieldmeta'; import type { TRemovedSignedFieldWithTokenMutationSchema, TSignFieldWithTokenMutationSchema, } from '@documenso/trpc/server/field-router/schema'; import { ElementVisible } from '@documenso/ui/primitives/element-visible'; import { DocumentSigningCheckboxField } from '~/components/general/document-signing/document-signing-checkbox-field'; import { DocumentSigningDateField } from '~/components/general/document-signing/document-signing-date-field'; import { DocumentSigningDropdownField } from '~/components/general/document-signing/document-signing-dropdown-field'; import { DocumentSigningEmailField } from '~/components/general/document-signing/document-signing-email-field'; import { DocumentSigningInitialsField } from '~/components/general/document-signing/document-signing-initials-field'; import { DocumentSigningNameField } from '~/components/general/document-signing/document-signing-name-field'; import { DocumentSigningNumberField } from '~/components/general/document-signing/document-signing-number-field'; import { DocumentSigningRadioField } from '~/components/general/document-signing/document-signing-radio-field'; import { DocumentSigningSignatureField } from '~/components/general/document-signing/document-signing-signature-field'; import { DocumentSigningTextField } from '~/components/general/document-signing/document-signing-text-field'; export type EmbedDocumentFieldsProps = { recipient: Recipient; fields: Field[]; metadata?: DocumentMeta | TemplateMeta | null; onSignField?: (value: TSignFieldWithTokenMutationSchema) => Promise | void; onUnsignField?: (value: TRemovedSignedFieldWithTokenMutationSchema) => Promise | void; }; export const EmbedDocumentFields = ({ recipient, fields, metadata, onSignField, onUnsignField, }: EmbedDocumentFieldsProps) => { return ( {fields.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), )} ); };