'use client'; import { useMemo, useState } from 'react'; import { CaretSortIcon, PersonIcon } from '@radix-ui/react-icons'; import { CheckCircle, Plus } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import { Avatar, AvatarFallback, AvatarImage } from '@kit/ui/avatar'; import { Button } from '@kit/ui/button'; import { Command, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, } from '@kit/ui/command'; import { If } from '@kit/ui/if'; import { Popover, PopoverContent, PopoverTrigger } from '@kit/ui/popover'; import { Separator } from '@kit/ui/separator'; import { Trans } from '@kit/ui/trans'; import { cn } from '@kit/ui/utils'; import { CreateTeamAccountDialog } from '../../../team-accounts/src/components/create-team-account-dialog'; import { usePersonalAccountData } from '../hooks/use-personal-account-data'; import { useUserWorkspace } from '../hooks/use-user-workspace'; interface AccountSelectorProps { accounts: Array<{ label: string | null; value: string | null; image?: string | null; }>; features: { enableTeamCreation: boolean; }; userId: string; selectedAccount?: string; collapsed?: boolean; className?: string; collisionPadding?: number; onAccountChange: (value: string | undefined) => void; } const PERSONAL_ACCOUNT_SLUG = 'personal'; export function AccountSelector({ accounts, selectedAccount, onAccountChange, userId, className, features = { enableTeamCreation: true, }, collapsed = false, collisionPadding = 20, }: React.PropsWithChildren) { const [open, setOpen] = useState(false); const [isCreatingAccount, setIsCreatingAccount] = useState(false); const { t } = useTranslation('teams'); const personalData = usePersonalAccountData(userId); const { user } = useUserWorkspace(); const value = useMemo(() => { return selectedAccount ?? PERSONAL_ACCOUNT_SLUG; }, [selectedAccount]); const Icon = (props: { item: string }) => { return ( ); }; const selected = accounts.find((account) => account.value === value); const pictureUrl = personalData.data?.picture_url; const PersonalAccountAvatar = () => pictureUrl ? ( ) : ( ); 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 ( <> onAccountChange(undefined)} value={PERSONAL_ACCOUNT_SLUG} > 0}> } > {(accounts ?? []).map((account) => ( { setOpen(false); if (onAccountChange) { onAccountChange(currentValue); } }} >
{account.label ? account.label[0] : ''} {account.label}
))}
); } function UserAvatar(props: { pictureUrl?: string }) { return ( ); }