diff --git a/apps/web/src/app/(dashboard)/documents/[id]/page.tsx b/apps/web/src/app/(dashboard)/documents/[id]/page.tsx
index b26b6308c..ce18f27b8 100644
--- a/apps/web/src/app/(dashboard)/documents/[id]/page.tsx
+++ b/apps/web/src/app/(dashboard)/documents/[id]/page.tsx
@@ -11,7 +11,7 @@ import { DocumentStatus as InternalDocumentStatus } from '@documenso/prisma/clie
import { LazyPDFViewer } from '@documenso/ui/primitives/lazy-pdf-viewer';
import { EditDocumentForm } from '~/app/(dashboard)/documents/[id]/edit-document';
-import { StackAvatarsWithTooltip } from '~/components/(dashboard)/avatar/stack-avatars-with-tooltip';
+import { StackAvatarsWithUI } from '~/components/(dashboard)/avatar/stack-avatars-with-ui';
import { DocumentStatus } from '~/components/formatter/document-status';
export type DocumentPageProps = {
@@ -71,9 +71,9 @@ export default async function DocumentPage({ params }: DocumentPageProps) {
-
+
{recipients.length} Recipient(s)
-
+
)}
diff --git a/apps/web/src/app/(dashboard)/documents/data-table.tsx b/apps/web/src/app/(dashboard)/documents/data-table.tsx
index c8adb1422..a0cc4b8e8 100644
--- a/apps/web/src/app/(dashboard)/documents/data-table.tsx
+++ b/apps/web/src/app/(dashboard)/documents/data-table.tsx
@@ -12,7 +12,7 @@ import { ExtendedDocumentStatus } from '@documenso/prisma/types/extended-documen
import { DataTable } from '@documenso/ui/primitives/data-table';
import { DataTablePagination } from '@documenso/ui/primitives/data-table-pagination';
-import { StackAvatarsWithTooltip } from '~/components/(dashboard)/avatar/stack-avatars-with-tooltip';
+import { StackAvatarsWithUI } from '~/components/(dashboard)/avatar/stack-avatars-with-ui';
import { DocumentStatus } from '~/components/formatter/document-status';
import { LocaleDate } from '~/components/formatter/locale-date';
@@ -64,9 +64,7 @@ export const DocumentsDataTable = ({ results }: DocumentsDataTableProps) => {
{
header: 'Recipient',
accessorKey: 'recipient',
- cell: ({ row }) => {
- return ;
- },
+ cell: ({ row }) => ,
},
{
header: 'Status',
diff --git a/apps/web/src/components/(dashboard)/avatar/stack-avatars-component.tsx b/apps/web/src/components/(dashboard)/avatar/stack-avatars-component.tsx
new file mode 100644
index 000000000..d7f3106e6
--- /dev/null
+++ b/apps/web/src/components/(dashboard)/avatar/stack-avatars-component.tsx
@@ -0,0 +1,71 @@
+import { getRecipientType } from '@documenso/lib/client-only/recipient-type';
+import { recipientAbbreviation } from '@documenso/lib/utils/recipient-formatter';
+import type { Recipient } from '@documenso/prisma/client';
+
+import { AvatarWithRecipient } from './avatar-with-recipient';
+import { StackAvatar } from './stack-avatar';
+
+export const StackAvatarsComponent = ({ recipients }: { recipients: Recipient[] }) => {
+ const waitingRecipients = recipients.filter(
+ (recipient) => getRecipientType(recipient) === 'waiting',
+ );
+
+ const openedRecipients = recipients.filter(
+ (recipient) => getRecipientType(recipient) === 'opened',
+ );
+
+ const completedRecipients = recipients.filter(
+ (recipient) => getRecipientType(recipient) === 'completed',
+ );
+
+ const uncompletedRecipients = recipients.filter(
+ (recipient) => getRecipientType(recipient) === 'unsigned',
+ );
+ return (
+
+ {completedRecipients.length > 0 && (
+
+
Completed
+ {completedRecipients.map((recipient: Recipient) => (
+
+
+ {recipient.email}
+
+ ))}
+
+ )}
+
+ {waitingRecipients.length > 0 && (
+
+
Waiting
+ {waitingRecipients.map((recipient: Recipient) => (
+
+ ))}
+
+ )}
+
+ {openedRecipients.length > 0 && (
+
+
Opened
+ {openedRecipients.map((recipient: Recipient) => (
+
+ ))}
+
+ )}
+
+ {uncompletedRecipients.length > 0 && (
+
+
Uncompleted
+ {uncompletedRecipients.map((recipient: Recipient) => (
+
+ ))}
+
+ )}
+
+ );
+};
diff --git a/apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx b/apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx
deleted file mode 100644
index 7429d8ee5..000000000
--- a/apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx
+++ /dev/null
@@ -1,99 +0,0 @@
-import { getRecipientType } from '@documenso/lib/client-only/recipient-type';
-import { recipientAbbreviation } from '@documenso/lib/utils/recipient-formatter';
-import type { Recipient } from '@documenso/prisma/client';
-import {
- Tooltip,
- TooltipContent,
- TooltipProvider,
- TooltipTrigger,
-} from '@documenso/ui/primitives/tooltip';
-
-import { AvatarWithRecipient } from './avatar-with-recipient';
-import { StackAvatar } from './stack-avatar';
-import { StackAvatars } from './stack-avatars';
-
-export type StackAvatarsWithTooltipProps = {
- recipients: Recipient[];
- position?: 'top' | 'bottom';
- children?: React.ReactNode;
-};
-
-export const StackAvatarsWithTooltip = ({
- recipients,
- position,
- children,
-}: StackAvatarsWithTooltipProps) => {
- const waitingRecipients = recipients.filter(
- (recipient) => getRecipientType(recipient) === 'waiting',
- );
-
- const openedRecipients = recipients.filter(
- (recipient) => getRecipientType(recipient) === 'opened',
- );
-
- const completedRecipients = recipients.filter(
- (recipient) => getRecipientType(recipient) === 'completed',
- );
-
- const uncompletedRecipients = recipients.filter(
- (recipient) => getRecipientType(recipient) === 'unsigned',
- );
-
- return (
-
-
-
- {children || }
-
-
-
-
- {completedRecipients.length > 0 && (
-
-
Completed
- {completedRecipients.map((recipient: Recipient) => (
-
-
- {recipient.email}
-
- ))}
-
- )}
-
- {waitingRecipients.length > 0 && (
-
-
Waiting
- {waitingRecipients.map((recipient: Recipient) => (
-
- ))}
-
- )}
-
- {openedRecipients.length > 0 && (
-
-
Opened
- {openedRecipients.map((recipient: Recipient) => (
-
- ))}
-
- )}
-
- {uncompletedRecipients.length > 0 && (
-
-
Uncompleted
- {uncompletedRecipients.map((recipient: Recipient) => (
-
- ))}
-
- )}
-
-
-
-
- );
-};
diff --git a/apps/web/src/components/(dashboard)/avatar/stack-avatars-with-ui.tsx b/apps/web/src/components/(dashboard)/avatar/stack-avatars-with-ui.tsx
new file mode 100644
index 000000000..5d5f24413
--- /dev/null
+++ b/apps/web/src/components/(dashboard)/avatar/stack-avatars-with-ui.tsx
@@ -0,0 +1,51 @@
+'use client';
+
+import { useWindowSize } from '@documenso/lib/client-only/hooks/use-window-size';
+import type { Recipient } from '@documenso/prisma/client';
+import { Popover, PopoverContent, PopoverTrigger } from '@documenso/ui/primitives/popover';
+import {
+ Tooltip,
+ TooltipContent,
+ TooltipProvider,
+ TooltipTrigger,
+} from '@documenso/ui/primitives/tooltip';
+
+import { StackAvatars } from './stack-avatars';
+import { StackAvatarsComponent } from './stack-avatars-component';
+
+export type StackAvatarsWithUIProps = {
+ recipients: Recipient[];
+ position?: 'top' | 'bottom';
+ children?: React.ReactNode;
+};
+
+export const StackAvatarsWithUI = ({ recipients, position, children }: StackAvatarsWithUIProps) => {
+ const size = useWindowSize();
+ return (
+ <>
+ {size.width > 1050 ? (
+
+
+
+ {children || }
+
+
+
+
+
+
+
+ ) : (
+
+
+ {children || }
+
+
+
+
+
+
+ )}
+ >
+ );
+};