'use client'; import * as React from 'react'; import { Button } from './button.js'; import { MinMaxButton } from './min-max-button.js'; import { getOrganizationAction, handleSignOutAction } from '../actions.js'; import { useAuth } from './authkit-provider.js'; interface ImpersonationProps extends React.ComponentPropsWithoutRef<'div'> { side?: 'top' | 'bottom'; returnTo?: string; } export function Impersonation({ side = 'bottom', returnTo, ...props }: ImpersonationProps) { const { user, impersonator, organizationId } = useAuth(); const [organization, setOrganization] = React.useState<{ id: string; name: string } | null>(null); React.useEffect(() => { if (!organizationId || !impersonator || !user) return; if (organization && organization.id === organizationId) return; getOrganizationAction(organizationId).then(setOrganization); }, [organizationId, impersonator, user]); if (!impersonator || !user) return null; return (
{ event.preventDefault(); await handleSignOutAction({ returnTo }); }} style={{ display: 'flex', alignItems: 'baseline', paddingLeft: 'var(--wi-s)', paddingRight: 'var(--wi-s)', position: 'relative', marginLeft: 'calc(var(--wi-s) * 2)', marginRight: 'calc(var(--wi-s) * 2)', pointerEvents: 'auto', backgroundColor: 'var(--wi-bgc)', borderStyle: 'solid', borderColor: 'var(--wi-bc)', borderLeftWidth: 'var(--wi-bw)', borderRightWidth: 'var(--wi-bw)', transition: 'all 500ms cubic-bezier(0.16, 1, 0.3, 1)', transform: `translateX(calc(var(--wi-minimized) * (var(--wi-s) * 10 - 5%)))`, opacity: 'calc(1 - var(--wi-minimized))', zIndex: 'calc(1 - var(--wi-minimized))', ...(side === 'top' && { paddingTop: 0, paddingBottom: 'var(--wi-s)', borderTopWidth: 0, borderBottomWidth: 'var(--wi-bw)', borderBottomLeftRadius: 'var(--wi-s)', borderBottomRightRadius: 'var(--wi-s)', }), ...(side === 'bottom' && { paddingTop: 'var(--wi-s)', paddingBottom: 0, borderTopWidth: 'var(--wi-bw)', borderBottomWidth: 0, borderTopLeftRadius: 'var(--wi-s)', borderTopRightRadius: 'var(--wi-s)', }), }} >

You are impersonating {user.email}{' '} {organization !== null && ( <> within the {organization.name} organization )}

{side === 'top' ? '↗' : '↘'}
{side === 'top' ? '↙' : '↖'}
); }