mirror of
https://github.com/documenso/documenso.git
synced 2025-11-12 07:43:16 +10:00
Adds the ability to specify an optional signing order for documents. When specified a document will be considered sequential with recipients only being allowed to sign in the order that they were specified in.
101 lines
3.1 KiB
TypeScript
101 lines
3.1 KiB
TypeScript
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 (
|
|
<div className="relative flex flex-col items-center justify-center px-4 py-12 sm:px-6 lg:px-8">
|
|
<div className="w-full max-w-md text-center">
|
|
<h2 className="tracking-tigh text-3xl font-bold">
|
|
<Trans>Waiting for Your Turn</Trans>
|
|
</h2>
|
|
|
|
<p className="text-muted-foreground mt-2 text-sm">
|
|
<Trans>
|
|
It's currently not your turn to sign. You will receive an email with instructions once
|
|
it's your turn to sign the document.
|
|
</Trans>
|
|
</p>
|
|
|
|
<p className="text-muted-foreground mt-4 text-sm">
|
|
<Trans>Please check your email for updates.</Trans>
|
|
</p>
|
|
|
|
<div className="mt-4">
|
|
{isOwnerOrTeamMember ? (
|
|
<Button variant="link" asChild>
|
|
<Link href={`${formatDocumentsPath(team?.url)}/${document.id}`}>
|
|
<Trans>Were you trying to edit this document instead?</Trans>
|
|
</Link>
|
|
</Button>
|
|
) : (
|
|
<Button variant="link" asChild>
|
|
<Link href="/documents">Return Home</Link>
|
|
</Button>
|
|
)}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|