import { Trans } from '@lingui/macro'; import { Link } from 'react-router'; import { transferTeamOwnership } from '@documenso/lib/server-only/team/transfer-team-ownership'; import { isTokenExpired } from '@documenso/lib/utils/token-verification'; import { prisma } from '@documenso/prisma'; import { Button } from '@documenso/ui/primitives/button'; import type { Route } from './+types/team.verify.transfer.token'; export async function loader({ params }: Route.LoaderArgs) { const { token } = params; if (!token) { return { state: 'InvalidLink', } as const; } const teamTransferVerification = await prisma.teamTransferVerification.findUnique({ where: { token, }, include: { team: true, }, }); if (!teamTransferVerification || isTokenExpired(teamTransferVerification.expiresAt)) { return { state: 'InvalidLink', } as const; } if (teamTransferVerification.completed) { return { state: 'AlreadyCompleted', teamName: teamTransferVerification.team.name, } as const; } const { team } = teamTransferVerification; let isTransferError = false; try { await transferTeamOwnership({ token }); } catch (e) { console.error(e); isTransferError = true; } if (isTransferError) { return { state: 'TransferError', teamName: team.name, } as const; } return { state: 'Success', teamName: team.name, teamUrl: team.url, } as const; } export default function VerifyTeamTransferPage({ loaderData }: Route.ComponentProps) { const data = loaderData; if (data.state === 'InvalidLink') { return (

Invalid link

This link is invalid or has expired. Please contact your team to resend a transfer request.

); } if (data.state === 'AlreadyCompleted') { return (

Team ownership transfer already completed!

You have already completed the ownership transfer for {data.teamName}.

); } if (data.state === 'TransferError') { return (

Team ownership transfer

Something went wrong while attempting to transfer the ownership of team{' '} {data.teamName} to your. Please try again later or contact support.

); } return (

Team ownership transferred!

The ownership of team {data.teamName} has been successfully transferred to you.

); }