'use client'; import { useState, useTransition } from 'react'; import { useRouter } from 'next/navigation'; import type { User } from '@supabase/gotrue-js'; import If from '@/components/app/If'; import LoadingOverlay from '@/components/app/LoadingOverlay'; import useCsrfToken from '@kit/hooks/use-csrf-token'; import { Alert, AlertDescription, AlertTitle } from '@kit/ui/alert'; import { Button } from '@kit/ui/button'; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from '@kit/ui/dialog'; import { impersonateUser } from '../actions.server'; import ImpersonateUserAuthSetter from '../components/ImpersonateUserAuthSetter'; function ImpersonateUserConfirmationModal({ user, }: React.PropsWithChildren<{ user: User; }>) { const router = useRouter(); const [isOpen, setIsOpen] = useState(true); const [pending, startTransition] = useTransition(); const csrfToken = useCsrfToken(); const [error, setError] = useState(); const [tokens, setTokens] = useState<{ accessToken: string; refreshToken: string; }>(); const displayText = user.email ?? user.phone ?? ''; const onDismiss = () => { router.back(); setIsOpen(false); }; const onConfirm = () => { startTransition(async () => { try { const response = await impersonateUser({ userId: user.id, csrfToken, }); setTokens(response); } catch (e) { setError(true); } }); }; return ( Impersonate User {(tokens) => { return ( <> Setting up your session... ); }} Impersonation Error Sorry, something went wrong. Please check the logs.

You are about to impersonate the account belonging to{' '} {displayText} with ID {user.id}.

You will be able to log in as them, see and do everything they can. To return to your own account, simply log out.

Like Uncle Ben said, with great power comes great responsibility. Use this power wisely.

); } export default ImpersonateUserConfirmationModal;