import { Trans } from '@lingui/macro'; import { CheckCircle2, Clock } from 'lucide-react'; import { P, match } from 'ts-pattern'; import { setupI18nSSR } from '@documenso/lib/client-only/providers/i18n.server'; import { NEXT_PUBLIC_WEBAPP_URL } from '@documenso/lib/constants/app'; import { getRequiredServerComponentSession } from '@documenso/lib/next-auth/get-server-component-session'; import { getTeamByUrl } from '@documenso/lib/server-only/team/get-team'; import { extractInitials } from '@documenso/lib/utils/recipient-formatter'; import { isTokenExpired } from '@documenso/lib/utils/token-verification'; import { Alert, AlertDescription, AlertTitle } from '@documenso/ui/primitives/alert'; import { AvatarWithText } from '@documenso/ui/primitives/avatar'; import { SettingsHeader } from '~/components/(dashboard)/settings/layout/header'; import { AddTeamEmailDialog } from '~/components/(teams)/dialogs/add-team-email-dialog'; import { DeleteTeamDialog } from '~/components/(teams)/dialogs/delete-team-dialog'; import { TransferTeamDialog } from '~/components/(teams)/dialogs/transfer-team-dialog'; import { UpdateTeamForm } from '~/components/(teams)/forms/update-team-form'; import { AvatarImageForm } from '~/components/forms/avatar-image'; import { TeamEmailDropdown } from './team-email-dropdown'; import { TeamTransferStatus } from './team-transfer-status'; export type TeamsSettingsPageProps = { params: { teamUrl: string; }; }; export default async function TeamsSettingsPage({ params }: TeamsSettingsPageProps) { await setupI18nSSR(); const { teamUrl } = params; const session = await getRequiredServerComponentSession(); const team = await getTeamByUrl({ userId: session.user.id, teamUrl }); const isTransferVerificationExpired = !team.transferVerification || isTokenExpired(team.transferVerification.expiresAt); return (
{(team.teamEmail || team.emailVerification) && ( Team email You can view documents associated with this email and use this identity when sending documents.
{team.teamEmail?.name || team.emailVerification?.name} } secondaryText={ {team.teamEmail?.email || team.emailVerification?.email} } />
{match({ teamEmail: team.teamEmail, emailVerification: team.emailVerification, }) .with({ teamEmail: P.not(null) }, () => ( <> Active )) .with( { emailVerification: P.when( (emailVerification) => emailVerification && emailVerification?.expiresAt < new Date(), ), }, () => ( <> Expired ), ) .with({ emailVerification: P.not(null) }, () => ( <> Awaiting email confirmation )) .otherwise(() => null)}
)} {!team.teamEmail && !team.emailVerification && (
Team email
    {/* Feature not available yet. */} {/*
  • Display this name and email when sending documents
  • */} {/*
  • View documents associated with this email
  • */} View documents associated with this email
)} {team.ownerUserId === session.user.id && ( <> {isTransferVerificationExpired && (
Transfer team Transfer the ownership of the team to another team member.
)}
Delete team This team, and any associated data excluding billing invoices will be permanently deleted.
)}
); }