import { useState } from 'react'; import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react'; import { Trans } from '@lingui/react/macro'; import type { User } from '@prisma/client'; import { useNavigate } from 'react-router'; import { match } from 'ts-pattern'; import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error'; import { trpc } from '@documenso/trpc/react'; import { Alert, AlertDescription, AlertTitle } from '@documenso/ui/primitives/alert'; import { Button } from '@documenso/ui/primitives/button'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from '@documenso/ui/primitives/dialog'; import { Input } from '@documenso/ui/primitives/input'; import { useToast } from '@documenso/ui/primitives/use-toast'; export type AdminUserDeleteDialogProps = { className?: string; user: User; }; export const AdminUserDeleteDialog = ({ className, user }: AdminUserDeleteDialogProps) => { const { _ } = useLingui(); const { toast } = useToast(); const navigate = useNavigate(); const [email, setEmail] = useState(''); const { mutateAsync: deleteUser, isPending: isDeletingUser } = trpc.admin.deleteUser.useMutation(); const onDeleteAccount = async () => { try { await deleteUser({ id: user.id, }); await navigate('/admin/users'); toast({ title: _(msg`Account deleted`), description: _(msg`The account has been deleted successfully.`), duration: 5000, }); } catch (err) { const error = AppError.parseError(err); const errorMessage = match(error.code) .with(AppErrorCode.NOT_FOUND, () => msg`User not found.`) .with(AppErrorCode.UNAUTHORIZED, () => msg`You are not authorized to delete this user.`) .otherwise(() => msg`An error occurred while deleting the user.`); toast({ title: _(msg`Error`), description: _(errorMessage), variant: 'destructive', duration: 7500, }); } }; return (
Delete Account Delete the users account and all its contents. This action is irreversible and will cancel their subscription, so proceed with caution.
Delete Account This action is not reversible. Please be certain.
To confirm, please enter the accounts email address
({user.email}).
setEmail(e.target.value)} />
); };