import { Button } from '@/components/ui/button' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu' import { Input } from '@/components/ui/input' import { useRelaySettings } from '@/providers/RelaySettingsProvider' import { Check, ChevronDown, Circle, CircleCheck, EllipsisVertical } from 'lucide-react' import { useState } from 'react' import RelayUrls from './RelayUrl' import { useRelaySettingsComponent } from './provider' import { TRelayGroup } from './types' import { useTranslation } from 'react-i18next' export default function RelayGroup({ group }: { group: TRelayGroup }) { const { t } = useTranslation() const { expandedRelayGroup } = useRelaySettingsComponent() const { temporaryRelayUrls } = useRelaySettings() const { groupName, relayUrls } = group const isActive = temporaryRelayUrls.length === 0 && group.isActive return (
0} />
{t('n relays', { n: relayUrls.length })}
{expandedRelayGroup === groupName && }
) } function RelayGroupActiveToggle({ groupName, isActive, canActive }: { groupName: string isActive: boolean canActive: boolean }) { const { switchRelayGroup } = useRelaySettings() return isActive ? ( ) : ( { if (canActive) { switchRelayGroup(groupName) } }} /> ) } function RelayGroupName({ groupName }: { groupName: string }) { const { t } = useTranslation() const [newGroupName, setNewGroupName] = useState(groupName) const [newNameError, setNewNameError] = useState(null) const { relayGroups, switchRelayGroup, renameRelayGroup } = useRelaySettings() const { renamingGroup, setRenamingGroup } = useRelaySettingsComponent() const hasRelayUrls = relayGroups.find((group) => group.groupName === groupName)?.relayUrls.length const saveNewGroupName = () => { if (groupName === newGroupName) { return setRenamingGroup(null) } if (relayGroups.find((group) => group.groupName === newGroupName)) { return setNewNameError(t('relay collection name already exists')) } const errMsg = renameRelayGroup(groupName, newGroupName) if (errMsg) { setNewNameError(errMsg) return } setRenamingGroup(null) } const handleRenameInputChange = (e: React.ChangeEvent) => { setNewGroupName(e.target.value) setNewNameError(null) } const handleRenameInputKeyDown = (event: React.KeyboardEvent) => { if (event.key === 'Enter') { event.preventDefault() saveNewGroupName() } } return renamingGroup === groupName ? (
{newNameError &&
{newNameError}
}
) : (
{ if (hasRelayUrls) { switchRelayGroup(groupName) } }} > {groupName}
) } function RelayUrlsExpandToggle({ groupName, children }: { groupName: string children: React.ReactNode }) { const { expandedRelayGroup, setExpandedRelayGroup } = useRelaySettingsComponent() return (
setExpandedRelayGroup((pre) => (pre === groupName ? null : groupName))} >
{children}
) } function RelayGroupOptions({ group }: { group: TRelayGroup }) { const { t } = useTranslation() const { deleteRelayGroup } = useRelaySettings() const { setRenamingGroup } = useRelaySettingsComponent() return ( setRenamingGroup(group.groupName)}> {t('Rename')} { navigator.clipboard.writeText( `https://jumble.social/?${group.relayUrls.map((url) => 'r=' + url).join('&')}` ) }} > {t('Copy share link')} deleteRelayGroup(group.groupName)} > {t('Delete')} ) }