'use client'; import { useState } from 'react'; import Link from 'next/link'; import { Trans, msg } from '@lingui/macro'; import { useLingui } from '@lingui/react'; import { CheckCircle, Copy, Download, Edit, EyeIcon, Loader, MoreHorizontal, MoveRight, Pencil, Share, Trash2, } from 'lucide-react'; import { useSession } from 'next-auth/react'; import { downloadPDF } from '@documenso/lib/client-only/download-pdf'; import { formatDocumentsPath } from '@documenso/lib/utils/teams'; import { DocumentStatus, RecipientRole } from '@documenso/prisma/client'; import type { Document, Recipient, Team, User } from '@documenso/prisma/client'; import type { DocumentWithData } from '@documenso/prisma/types/document-with-data'; import { trpc as trpcClient } from '@documenso/trpc/client'; import { DocumentShareButton } from '@documenso/ui/components/document/document-share-button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger, } from '@documenso/ui/primitives/dropdown-menu'; import { useToast } from '@documenso/ui/primitives/use-toast'; import { DocumentRecipientLinkCopyDialog } from '~/components/document/document-recipient-link-copy-dialog'; import { ResendDocumentActionItem } from './_action-items/resend-document'; import { DeleteDocumentDialog } from './delete-document-dialog'; import { DuplicateDocumentDialog } from './duplicate-document-dialog'; import { MoveDocumentDialog } from './move-document-dialog'; export type DataTableActionDropdownProps = { row: Document & { User: Pick; Recipient: Recipient[]; team: Pick | null; }; team?: Pick & { teamEmail?: string }; }; export const DataTableActionDropdown = ({ row, team }: DataTableActionDropdownProps) => { const { data: session } = useSession(); const { toast } = useToast(); const { _ } = useLingui(); const [isDeleteDialogOpen, setDeleteDialogOpen] = useState(false); const [isDuplicateDialogOpen, setDuplicateDialogOpen] = useState(false); const [isMoveDialogOpen, setMoveDialogOpen] = useState(false); if (!session) { return null; } const recipient = row.Recipient.find((recipient) => recipient.email === session.user.email); const isOwner = row.User.id === session.user.id; // const isRecipient = !!recipient; const isDraft = row.status === DocumentStatus.DRAFT; const isPending = row.status === DocumentStatus.PENDING; const isComplete = row.status === DocumentStatus.COMPLETED; // const isSigned = recipient?.signingStatus === SigningStatus.SIGNED; const isCurrentTeamDocument = team && row.team?.url === team.url; const canManageDocument = Boolean(isOwner || isCurrentTeamDocument); const documentsPath = formatDocumentsPath(team?.url); const onDownloadClick = async () => { try { let document: DocumentWithData | null = null; if (!recipient) { document = await trpcClient.document.getDocumentById.query({ documentId: row.id, teamId: team?.id, }); } else { document = await trpcClient.document.getDocumentByToken.query({ token: recipient.token, }); } const documentData = document?.documentData; if (!documentData) { return; } await downloadPDF({ documentData, fileName: row.title }); } catch (err) { toast({ title: _(msg`Something went wrong`), description: _(msg`An error occurred while downloading your document.`), variant: 'destructive', }); } }; const nonSignedRecipients = row.Recipient.filter((item) => item.signingStatus !== 'SIGNED'); return ( Action {!isDraft && recipient && recipient?.role !== RecipientRole.CC && ( {recipient?.role === RecipientRole.VIEWER && ( <> View )} {recipient?.role === RecipientRole.SIGNER && ( <> Sign )} {recipient?.role === RecipientRole.APPROVER && ( <> Approve )} )} Edit Download setDuplicateDialogOpen(true)}> Duplicate {/* We don't want to allow teams moving documents across at the moment. */} {!team && ( setMoveDialogOpen(true)}> Move to Team )} {/* No point displaying this if there's no functionality. */} {/* Void */} setDeleteDialogOpen(true)} disabled={Boolean(!canManageDocument && team?.teamEmail)} > {canManageDocument ? _(msg`Delete`) : _(msg`Hide`)} Share {canManageDocument && ( e.preventDefault()}>
Signing Links
} /> )} ( e.preventDefault()}>
{loading ? : } Share Signing Card
)} />
{isDuplicateDialogOpen && ( )}
); };