import { useSecondaryPage } from '@/PageManager' import { Button } from '@/components/ui/button' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from '@/components/ui/dropdown-menu' import { useRelayConnectionRows } from '@/hooks/useRelayConnectionRows' import { toRelay } from '@/lib/link' import { simplifyUrl } from '@/lib/url' import { cn } from '@/lib/utils' import { useTranslation } from 'react-i18next' import RelayIcon from '../RelayIcon' const MAX_ICONS = 14 function rowMenuClass(connected: boolean) { return cn(!connected && 'opacity-50 text-muted-foreground') } /** * Desktop sidebar: relay avatars for favorites + defaults + inbox; muted when the pool socket is down. */ export function ConnectedRelaysSidebarStrip({ className }: { className?: string }) { const { t } = useTranslation() const { push } = useSecondaryPage() const { rows } = useRelayConnectionRows() const shown = rows.slice(0, MAX_ICONS) const overflowRows = rows.slice(MAX_ICONS) const overflow = overflowRows.length if (rows.length === 0) { return (

{t('Active relays')}

) } return (

{t('Active relays')}

{shown.map(({ url, connected }) => ( ))} {overflow > 0 ? ( {t('More relays', { count: overflow })} {overflowRows.map(({ url, connected }) => ( push(toRelay(url))} > {simplifyUrl(url)} ))} ) : null}
) }