import { useSession } from '@documenso/lib/client-only/providers/session'; import type { TEnvelope } from '@documenso/lib/types/envelope'; import { isDocumentCompleted } from '@documenso/lib/utils/document'; import { getEnvelopeItemPermissions, mapSecondaryIdToDocumentId } from '@documenso/lib/utils/envelope'; import { formatDocumentsPath } from '@documenso/lib/utils/teams'; import { trpc as trpcReact } from '@documenso/trpc/react'; import { DocumentShareButton } from '@documenso/ui/components/document/document-share-button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger, } from '@documenso/ui/primitives/dropdown-menu'; import { Trans } from '@lingui/react/macro'; import { DocumentStatus, EnvelopeType } from '@prisma/client'; import { Copy, Download, Edit, FileOutputIcon, History, Loader, MoreHorizontal, Pencil, ScrollTextIcon, Share, Trash2, } from 'lucide-react'; import { useState } from 'react'; import { Link, useNavigate } from 'react-router'; import { EnvelopeDeleteDialog } from '~/components/dialogs/envelope-delete-dialog'; import { EnvelopeDownloadDialog } from '~/components/dialogs/envelope-download-dialog'; import { EnvelopeDuplicateDialog } from '~/components/dialogs/envelope-duplicate-dialog'; import { EnvelopeRedistributeDialog } from '~/components/dialogs/envelope-redistribute-dialog'; import { EnvelopeRenameDialog } from '~/components/dialogs/envelope-rename-dialog'; import { EnvelopeSaveAsTemplateDialog } from '~/components/dialogs/envelope-save-as-template-dialog'; import { DocumentRecipientLinkCopyDialog } from '~/components/general/document/document-recipient-link-copy-dialog'; import { useCurrentTeam } from '~/providers/team'; export type DocumentPageViewDropdownProps = { envelope: TEnvelope; }; export const DocumentPageViewDropdown = ({ envelope }: DocumentPageViewDropdownProps) => { const { user } = useSession(); const navigate = useNavigate(); const team = useCurrentTeam(); const trpcUtils = trpcReact.useUtils(); const [isRenameDialogOpen, setRenameDialogOpen] = useState(false); const [isSaveAsTemplateDialogOpen, setSaveAsTemplateDialogOpen] = useState(false); const recipient = envelope.recipients.find((recipient) => recipient.email === user.email); const isOwner = envelope.userId === user.id; const isDraft = envelope.status === DocumentStatus.DRAFT; const isPending = envelope.status === DocumentStatus.PENDING; const isDeleted = envelope.deletedAt !== null; const isComplete = isDocumentCompleted(envelope); const isCurrentTeamDocument = team && envelope.teamId === team.id; const canManageDocument = Boolean(isOwner || isCurrentTeamDocument); const { canTitleBeChanged } = getEnvelopeItemPermissions(envelope, []); const documentsPath = formatDocumentsPath(team.url); return ( Action {(isOwner || isCurrentTeamDocument) && !isComplete && ( Edit )} {canManageDocument && canTitleBeChanged && ( setRenameDialogOpen(true)}> Rename )} e.preventDefault()}>
Download
} /> Audit Logs e.preventDefault()}>
Duplicate
} /> setSaveAsTemplateDialogOpen(true)}> Save as Template { void navigate(documentsPath); }} trigger={ e.preventDefault()}>
Delete
} /> Share {canManageDocument && ( e.preventDefault()}> Signing Links } /> )} {canManageDocument && ( e.preventDefault()}>
Resend
} /> )} ( e.preventDefault()}>
{loading ? : } Share Signing Card
)} />
{ await trpcUtils.envelope.get.invalidate(); }} />
); };