import { Trans } from '@lingui/react/macro'; import { FileIcon } from 'lucide-react'; import { DateTime } from 'luxon'; import { Link, redirect } from 'react-router'; import { useOptionalSession } from '@documenso/lib/client-only/providers/session'; import { getPublicProfileByUrl } from '@documenso/lib/server-only/profile/get-public-profile-by-url'; import { formatAvatarUrl } from '@documenso/lib/utils/avatars'; import { extractInitials } from '@documenso/lib/utils/recipient-formatter'; import { formatDirectTemplatePath } from '@documenso/lib/utils/templates'; import { Avatar, AvatarFallback, AvatarImage } from '@documenso/ui/primitives/avatar'; import { Button } from '@documenso/ui/primitives/button'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@documenso/ui/primitives/table'; import { Tooltip, TooltipContent, TooltipTrigger } from '@documenso/ui/primitives/tooltip'; import type { Route } from './+types/p.$url'; const BADGE_DATA = { Premium: { imageSrc: '/static/premium-user-badge.svg', name: 'Premium', }, EarlySupporter: { imageSrc: '/static/early-supporter-badge.svg', name: 'Early supporter', }, }; export async function loader({ params }: Route.LoaderArgs) { const { url: profileUrl } = params; if (!profileUrl) { throw redirect('/'); } const publicProfile = await getPublicProfileByUrl({ profileUrl, }).catch(() => null); if (!publicProfile || !publicProfile.profile.enabled) { throw new Response('Not Found', { status: 404 }); } return { publicProfile, }; } export default function PublicProfilePage({ loaderData }: Route.ComponentProps) { const { publicProfile } = loaderData; const { profile, templates } = publicProfile; const { sessionData } = useOptionalSession(); const user = sessionData?.user; return (
{publicProfile.avatarImageId && ( )} {extractInitials(publicProfile.name)}

{publicProfile.name}

{publicProfile.badge && ( Profile badge Profile badge

{BADGE_DATA[publicProfile.badge.type].name}

Since {DateTime.fromJSDate(publicProfile.badge.since).toFormat('LLL ‘yy')}

)}
{(profile.bio ?? '').split('\n').map((line, index) => (

{line}

))}
{templates.length === 0 && (

It looks like {publicProfile.name} hasn't added any documents to their profile yet. {' '} {!user?.id && ( While waiting for them to do so you can create your own Documenso account and get started with document signing right away. )} {'userId' in profile && user?.id === profile.userId && ( Go to your{' '} public profile settings {' '} to add documents. )}

)} {templates.length > 0 && (
Documents {templates.map((template) => (

{template.publicTitle}

{template.publicDescription}

))}
)}
); }