import Link from 'next/link'; import { Trans } from '@lingui/macro'; import { DateTime } from 'luxon'; import { setupI18nSSR } from '@documenso/lib/client-only/providers/i18n.server'; import { getServerComponentSession } from '@documenso/lib/next-auth/get-server-component-session'; import { encryptSecondaryData } from '@documenso/lib/server-only/crypto/encrypt'; import { declineTeamInvitation } from '@documenso/lib/server-only/team/decline-team-invitation'; import { getTeamById } from '@documenso/lib/server-only/team/get-team'; import { prisma } from '@documenso/prisma'; import { TeamMemberInviteStatus } from '@documenso/prisma/client'; import { Button } from '@documenso/ui/primitives/button'; type DeclineInvitationPageProps = { params: { token: string; }; }; export default async function DeclineInvitationPage({ params: { token }, }: DeclineInvitationPageProps) { await setupI18nSSR(); const session = await getServerComponentSession(); const teamMemberInvite = await prisma.teamMemberInvite.findUnique({ where: { token, }, }); if (!teamMemberInvite) { return (

Invalid token

This token is invalid or has expired. No action is needed.

); } const team = await getTeamById({ teamId: teamMemberInvite.teamId }); const user = await prisma.user.findFirst({ where: { email: { equals: teamMemberInvite.email, mode: 'insensitive', }, }, }); if (user) { await declineTeamInvitation({ userId: user.id, teamId: team.id }); } if (!user && teamMemberInvite.status !== TeamMemberInviteStatus.DECLINED) { await prisma.teamMemberInvite.update({ where: { id: teamMemberInvite.id, }, data: { status: TeamMemberInviteStatus.DECLINED, }, }); } const email = encryptSecondaryData({ data: teamMemberInvite.email, expiresAt: DateTime.now().plus({ days: 1 }).toMillis(), }); if (!user) { return (

Team invitation

You have been invited by {team.name} to join their team.

To decline this invitation you must create an account.

); } const isSessionUserTheInvitedUser = user?.id === session.user?.id; return (

Invitation declined

You have declined the invitation from {team.name} to join their team.

{isSessionUserTheInvitedUser ? ( ) : ( )}
); }