import { useState } from 'react'; import { useLingui } from '@lingui/react'; import { Trans } from '@lingui/react/macro'; import type { DocumentMeta, TemplateMeta } from '@prisma/client'; import { FieldType, SigningStatus } from '@prisma/client'; import { Clock, EyeOffIcon } from 'lucide-react'; import { P, match } from 'ts-pattern'; import { DEFAULT_DOCUMENT_DATE_FORMAT, convertToLocalSystemFormat, } 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 { DocumentField } from '@documenso/lib/server-only/field/get-fields-for-document'; import { parseMessageDescriptor } from '@documenso/lib/utils/i18n'; import { extractInitials } from '@documenso/lib/utils/recipient-formatter'; import { FieldRootContainer } from '@documenso/ui/components/field/field'; import { SignatureIcon } from '@documenso/ui/icons/signature'; import { cn } from '@documenso/ui/lib/utils'; import { Avatar, AvatarFallback } from '@documenso/ui/primitives/avatar'; import { Badge } from '@documenso/ui/primitives/badge'; import { FRIENDLY_FIELD_TYPE } from '@documenso/ui/primitives/document-flow/types'; import { ElementVisible } from '@documenso/ui/primitives/element-visible'; import { PopoverHover } from '@documenso/ui/primitives/popover'; export type DocumentReadOnlyFieldsProps = { fields: DocumentField[]; documentMeta?: DocumentMeta | TemplateMeta; showFieldStatus?: boolean; }; export const DocumentReadOnlyFields = ({ documentMeta, fields, showFieldStatus = true, }: DocumentReadOnlyFieldsProps) => { const { _ } = useLingui(); const [hiddenFieldIds, setHiddenFieldIds] = useState>({}); const handleHideField = (fieldId: string) => { setHiddenFieldIds((prev) => ({ ...prev, [fieldId]: true })); }; return ( {fields.map( (field) => !hiddenFieldIds[field.secondaryId] && (
{extractInitials(field.recipient.name || field.recipient.email)} } contentProps={{ className: 'relative flex w-fit flex-col p-4 text-sm', }} > {showFieldStatus && ( {field.recipient.signingStatus === SigningStatus.SIGNED ? ( <> Signed ) : ( <> Pending )} )}

{parseMessageDescriptor(_, FRIENDLY_FIELD_TYPE[field.type])} field

{field.recipient.name ? `${field.recipient.name} (${field.recipient.email})` : field.recipient.email}{' '}

{field.recipient.signingStatus === SigningStatus.SIGNED && match(field) .with({ type: FieldType.SIGNATURE }, (field) => field.signature?.signatureImageAsBase64 ? ( Signature ) : (

{field.signature?.typedSignature}

), ) .with( { type: P.union( FieldType.NAME, FieldType.INITIALS, FieldType.EMAIL, FieldType.NUMBER, FieldType.RADIO, FieldType.CHECKBOX, FieldType.DROPDOWN, ), }, () => field.customText, ) .with({ type: FieldType.TEXT }, () => field.customText.substring(0, 20) + '...') .with({ type: FieldType.DATE }, () => convertToLocalSystemFormat( field.customText, documentMeta?.dateFormat ?? DEFAULT_DOCUMENT_DATE_FORMAT, documentMeta?.timezone ?? DEFAULT_DOCUMENT_TIME_ZONE, ), ) .with({ type: FieldType.FREE_SIGNATURE }, () => null) .exhaustive()} {field.recipient.signingStatus === SigningStatus.NOT_SIGNED && (

{parseMessageDescriptor(_, FRIENDLY_FIELD_TYPE[field.type])}

)}
), )}
); };