import Link from 'next/link'; import { getRequiredServerComponentSession } from '@documenso/lib/next-auth/get-server-component-session'; import { findDocuments } from '@documenso/lib/server-only/document/find-documents'; import type { PeriodSelectorValue } from '@documenso/lib/server-only/document/find-documents'; import type { GetStatsInput } from '@documenso/lib/server-only/document/get-stats'; import { getStats } from '@documenso/lib/server-only/document/get-stats'; import { parseToIntegerArray } from '@documenso/lib/utils/params'; import { formatDocumentsPath } from '@documenso/lib/utils/teams'; import type { Team, TeamEmail } from '@documenso/prisma/client'; import { isExtendedDocumentStatus } from '@documenso/prisma/guards/is-extended-document-status'; import { ExtendedDocumentStatus } from '@documenso/prisma/types/extended-document-status'; import { Avatar, AvatarFallback } from '@documenso/ui/primitives/avatar'; import { Tabs, TabsList, TabsTrigger } from '@documenso/ui/primitives/tabs'; import { PeriodSelector } from '~/components/(dashboard)/period-selector/period-selector'; import { isPeriodSelectorValue } from '~/components/(dashboard)/period-selector/types'; import { DocumentStatus } from '~/components/formatter/document-status'; import { DocumentsDataTable } from './data-table'; import { DataTableSenderFilter } from './data-table-sender-filter'; import { EmptyDocumentState } from './empty-state'; import { UploadDocument } from './upload-document'; export type DocumentsPageViewProps = { searchParams?: { status?: ExtendedDocumentStatus; period?: PeriodSelectorValue; page?: string; perPage?: string; senderIds?: string; }; team?: Team & { teamEmail?: TeamEmail | null }; }; export const DocumentsPageView = async ({ searchParams = {}, team }: DocumentsPageViewProps) => { const { user } = await getRequiredServerComponentSession(); const status = isExtendedDocumentStatus(searchParams.status) ? searchParams.status : 'ALL'; const period = isPeriodSelectorValue(searchParams.period) ? searchParams.period : ''; const page = Number(searchParams.page) || 1; const perPage = Number(searchParams.perPage) || 20; const senderIds = parseToIntegerArray(searchParams.senderIds ?? ''); const currentTeam = team ? { id: team.id, url: team.url } : undefined; const getStatOptions: GetStatsInput = { user, period, }; if (team) { getStatOptions.team = { teamId: team.id, teamEmail: team.teamEmail?.email, senderIds, }; } const stats = await getStats(getStatOptions); const results = await findDocuments({ userId: user.id, teamId: team?.id, status, orderBy: { column: 'createdAt', direction: 'desc', }, page, perPage, period, senderIds, }); const getTabHref = (value: typeof status) => { const params = new URLSearchParams(searchParams); params.set('status', value); if (params.has('page')) { params.delete('page'); } return `${formatDocumentsPath(team?.url)}?${params.toString()}`; }; return (
{team && ( {team.name.slice(0, 1)} )}

Documents

{[ ExtendedDocumentStatus.INBOX, ExtendedDocumentStatus.PENDING, ExtendedDocumentStatus.COMPLETED, ExtendedDocumentStatus.DRAFT, ExtendedDocumentStatus.ALL, ].map((value) => ( {value !== ExtendedDocumentStatus.ALL && ( {Math.min(stats[value], 99)} {stats[value] > 99 && '+'} )} ))} {team && }
{results.count > 0 && ( )} {results.count === 0 && }
); };