'use client'; import { useEffect, useState } from 'react'; import { useSearchParams } from 'next/navigation'; import { Trans, msg } from '@lingui/macro'; import { useLingui } from '@lingui/react'; import { useCopyToClipboard } from '@documenso/lib/client-only/hooks/use-copy-to-clipboard'; import { useUpdateSearchParams } from '@documenso/lib/client-only/hooks/use-update-search-params'; import { NEXT_PUBLIC_WEBAPP_URL } from '@documenso/lib/constants/app'; import { RECIPIENT_ROLES_DESCRIPTION } from '@documenso/lib/constants/recipient-roles'; import { formatSigningLink } from '@documenso/lib/utils/recipients'; import type { Recipient } from '@documenso/prisma/client'; import { RecipientRole } from '@documenso/prisma/client'; import { CopyTextButton } from '@documenso/ui/components/common/copy-text-button'; import { AvatarWithText } from '@documenso/ui/primitives/avatar'; import { Button } from '@documenso/ui/primitives/button'; import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from '@documenso/ui/primitives/dialog'; import { useToast } from '@documenso/ui/primitives/use-toast'; export type DocumentRecipientLinkCopyDialogProps = { trigger?: React.ReactNode; recipients: Recipient[]; }; export const DocumentRecipientLinkCopyDialog = ({ trigger, recipients, }: DocumentRecipientLinkCopyDialogProps) => { const { _ } = useLingui(); const { toast } = useToast(); const [, copy] = useCopyToClipboard(); const searchParams = useSearchParams(); const updateSearchParams = useUpdateSearchParams(); const [open, setOpen] = useState(false); const actionSearchParam = searchParams?.get('action'); const onBulkCopy = async () => { const generatedString = recipients .filter((recipient) => recipient.role !== RecipientRole.CC) .map((recipient) => `${recipient.email}\n${NEXT_PUBLIC_WEBAPP_URL()}/sign/${recipient.token}`) .join('\n\n'); await copy(generatedString).then(() => { toast({ title: _(msg`Copied to clipboard`), description: _(msg`All signing links have been copied to your clipboard.`), }); }); }; useEffect(() => { if (actionSearchParam === 'view-signing-links') { setOpen(true); updateSearchParams({ action: null }); } }, [actionSearchParam, open, setOpen, updateSearchParams]); return (
} secondaryText={{_(RECIPIENT_ROLES_DESCRIPTION[recipient.role].roleName)}
} /> {recipient.role !== RecipientRole.CC && (