'use client'; import { useState } from 'react'; import Link from 'next/link'; import { Copy, Download, Edit, History, Loader, MoreHorizontal, Pencil, Share, Trash2, XCircle, } from 'lucide-react'; import { useSession } from 'next-auth/react'; import { useCopyShareLink } from '@documenso/lib/client-only/hooks/use-copy-share-link'; import { TOAST_DOCUMENT_SHARE_ERROR, TOAST_DOCUMENT_SHARE_SUCCESS, } from '@documenso/lib/constants/toast'; import { getFile } from '@documenso/lib/universal/upload/get-file'; import { Document, DocumentStatus, Recipient, User } from '@documenso/prisma/client'; import { DocumentWithData } from '@documenso/prisma/types/document-with-data'; import { trpc as trpcClient } from '@documenso/trpc/client'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger, } from '@documenso/ui/primitives/dropdown-menu'; import { useToast } from '@documenso/ui/primitives/use-toast'; import { DeleteDraftDocumentDialog } from './delete-draft-document-dialog'; export type DataTableActionDropdownProps = { row: Document & { User: Pick; Recipient: Recipient[]; }; }; export const DataTableActionDropdown = ({ row }: DataTableActionDropdownProps) => { const { data: session } = useSession(); const { toast } = useToast(); const { createAndCopyShareLink, isCopyingShareLink } = useCopyShareLink({ onSuccess: () => toast(TOAST_DOCUMENT_SHARE_SUCCESS), onError: () => toast(TOAST_DOCUMENT_SHARE_ERROR), }); const [isDeleteDialogOpen, setDeleteDialogOpen] = 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 isDocumentDeletable = isOwner && row.status === DocumentStatus.DRAFT; const onDownloadClick = async () => { let document: DocumentWithData | null = null; if (!recipient) { document = await trpcClient.document.getDocumentById.query({ id: row.id, }); } else { document = await trpcClient.document.getDocumentByToken.query({ token: recipient.token, }); } const documentData = document?.documentData; if (!documentData) { return; } const documentBytes = await getFile(documentData); const blob = new Blob([documentBytes], { type: 'application/pdf', }); const link = window.document.createElement('a'); link.href = window.URL.createObjectURL(blob); link.download = row.title || 'document.pdf'; link.click(); window.URL.revokeObjectURL(link.href); }; return ( Action Sign Edit Download Duplicate Void setDeleteDialogOpen(true)} disabled={!isDocumentDeletable}> Delete Share Resend createAndCopyShareLink({ token: recipient?.token, documentId: row.id, }) } > {isCopyingShareLink ? ( ) : ( )} Share {isDocumentDeletable && ( )} ); };