import { useMemo } from 'react'; import { useLingui } from '@lingui/react'; import { Trans } from '@lingui/react/macro'; import { type DocumentStatus, type Recipient } from '@prisma/client'; import { RecipientStatusType, getRecipientType } from '@documenso/lib/client-only/recipient-type'; import { RECIPIENT_ROLES_DESCRIPTION } from '@documenso/lib/constants/recipient-roles'; import { recipientAbbreviation } from '@documenso/lib/utils/recipient-formatter'; import { PopoverHover } from '@documenso/ui/primitives/popover'; import { AvatarWithRecipient } from './avatar-with-recipient'; import { StackAvatar } from './stack-avatar'; import { StackAvatars } from './stack-avatars'; export type StackAvatarsWithTooltipProps = { documentStatus: DocumentStatus; recipients: Recipient[]; position?: 'top' | 'bottom'; children?: React.ReactNode; }; export const StackAvatarsWithTooltip = ({ documentStatus, recipients, position, children, }: StackAvatarsWithTooltipProps) => { const { _ } = useLingui(); const waitingRecipients = recipients.filter( (recipient) => getRecipientType(recipient) === RecipientStatusType.WAITING, ); const openedRecipients = recipients.filter( (recipient) => getRecipientType(recipient) === RecipientStatusType.OPENED, ); const completedRecipients = recipients.filter( (recipient) => getRecipientType(recipient) === RecipientStatusType.COMPLETED, ); const uncompletedRecipients = recipients.filter( (recipient) => getRecipientType(recipient) === RecipientStatusType.UNSIGNED, ); const rejectedRecipients = recipients.filter( (recipient) => getRecipientType(recipient) === RecipientStatusType.REJECTED, ); const sortedRecipients = useMemo(() => { const otherRecipients = recipients.filter( (recipient) => getRecipientType(recipient) !== RecipientStatusType.REJECTED, ); return [ ...rejectedRecipients.sort((a, b) => a.id - b.id), ...otherRecipients.sort((a, b) => { return a.id - b.id; }), ]; }, [recipients]); return ( } contentProps={{ className: 'flex flex-col gap-y-5 py-2', side: position, }} > {completedRecipients.length > 0 && (

Completed

{completedRecipients.map((recipient: Recipient) => (

{recipient.email}

{_(RECIPIENT_ROLES_DESCRIPTION[recipient.role].roleName)}

))}
)} {rejectedRecipients.length > 0 && (

Rejected

{rejectedRecipients.map((recipient: Recipient) => (

{recipient.email}

{_(RECIPIENT_ROLES_DESCRIPTION[recipient.role].roleName)}

))}
)} {waitingRecipients.length > 0 && (

Waiting

{waitingRecipients.map((recipient: Recipient) => ( ))}
)} {openedRecipients.length > 0 && (

Opened

{openedRecipients.map((recipient: Recipient) => ( ))}
)} {uncompletedRecipients.length > 0 && (

Uncompleted

{uncompletedRecipients.map((recipient: Recipient) => ( ))}
)}
); };