'use client'; import { useMemo } from 'react'; import Link from 'next/link'; import type { User } from '@supabase/supabase-js'; import { ChevronsUpDown, Home, LogOut, MessageCircleQuestion, Shield, } from 'lucide-react'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '@kit/ui/dropdown-menu'; import { If } from '@kit/ui/if'; import { SubMenuModeToggle } from '@kit/ui/mode-toggle'; import { ProfileAvatar } from '@kit/ui/profile-avatar'; import { Trans } from '@kit/ui/trans'; import { cn } from '@kit/ui/utils'; import { usePersonalAccountData } from '../hooks/use-personal-account-data'; export function PersonalAccountDropdown({ className, user, signOutRequested, showProfileName = true, paths, features, account, }: { user: User; account?: { id: string | null; name: string | null; picture_url: string | null; }; signOutRequested: () => unknown; paths: { home: string; }; features: { enableThemeToggle: boolean; }; showProfileName?: boolean; className?: string; }) { const { data: personalAccountData } = usePersonalAccountData( user.id, account, ); const signedInAsLabel = useMemo(() => { const email = user?.email ?? undefined; const phone = user?.phone ?? undefined; return email ?? phone; }, [user]); const displayName = personalAccountData?.name ?? account?.name ?? user?.email ?? ''; const isSuperAdmin = useMemo(() => { const factors = user?.factors ?? []; const hasAdminRole = user?.app_metadata.role === 'super-admin'; const hasTotpFactor = factors.some( (factor) => factor.factor_type === 'totp' && factor.status === 'verified', ); return hasAdminRole && hasTotpFactor; }, [user]); return (
{displayName} {signedInAsLabel}
{signedInAsLabel}
Super Admin
); }