import Link from 'next/link'; import { notFound, redirect } from 'next/navigation'; import { Trans } from '@lingui/macro'; import { setupI18nSSR } from '@documenso/lib/client-only/providers/i18n.server'; import { getServerComponentSession } from '@documenso/lib/next-auth/get-server-component-session'; import { getDocumentById } from '@documenso/lib/server-only/document/get-document-by-id'; import { getDocumentAndSenderByToken } from '@documenso/lib/server-only/document/get-document-by-token'; import { getRecipientByToken } from '@documenso/lib/server-only/recipient/get-recipient-by-token'; import { getTeamById } from '@documenso/lib/server-only/team/get-team'; import { formatDocumentsPath } from '@documenso/lib/utils/teams'; import type { Team } from '@documenso/prisma/client'; import { DocumentStatus } from '@documenso/prisma/client'; import { Button } from '@documenso/ui/primitives/button'; type WaitingForTurnToSignPageProps = { params: { token?: string }; }; export default async function WaitingForTurnToSignPage({ params: { token }, }: WaitingForTurnToSignPageProps) { setupI18nSSR(); if (!token) { return notFound(); } const { user } = await getServerComponentSession(); const [document, recipient] = await Promise.all([ getDocumentAndSenderByToken({ token }).catch(() => null), getRecipientByToken({ token }).catch(() => null), ]); if (!document || !recipient) { return notFound(); } if (document.status === DocumentStatus.COMPLETED) { return redirect(`/sign/${token}/complete`); } let isOwnerOrTeamMember = false; let team: Team | null = null; if (user) { isOwnerOrTeamMember = await getDocumentById({ id: document.id, userId: user.id, teamId: document.teamId ?? undefined, }) .then((document) => !!document) .catch(() => false); if (document.teamId) { team = await getTeamById({ userId: user.id, teamId: document.teamId, }); } } return (