import { useSmartRelayNavigation } from '@/PageManager' import { DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator } 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' function rowMuted(connected: boolean) { return !connected } function rowTitle(url: string, connected: boolean, t: (k: string) => string) { const base = simplifyUrl(url) if (!connected) return `${base} — ${t('Not connected')}` return base } function rowClass(connected: boolean) { return cn(rowMuted(connected) && 'opacity-45 text-muted-foreground') } /** Relay list block for account (or similar) dropdown menus. */ export function ActiveRelaysDropdownSection() { const { t } = useTranslation() const { navigateToRelay } = useSmartRelayNavigation() const { rows, connectedCount } = useRelayConnectionRows() if (rows.length === 0) return null const countSummary = `${connectedCount}/${rows.length}` return ( <> {t('Active relays')} {countSummary} {rows.map(({ url, connected }) => ( navigateToRelay(toRelay(url))} className={cn('min-w-52 gap-2', rowClass(connected))} > {simplifyUrl(url)} ))} ) }