import { Button } from '@/components/ui/button' import { Drawer, DrawerContent, DrawerTrigger } from '@/components/ui/drawer' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu' import { Input } from '@/components/ui/input' import { useFavoriteRelays } from '@/providers/FavoriteRelaysProvider' import { useScreenSize } from '@/providers/ScreenSizeProvider' import { TRelaySet } from '@/types' import { Check, ChevronDown, Edit, EllipsisVertical, FolderClosed, Link, Trash2 } from 'lucide-react' import { useState } from 'react' import { useTranslation } from 'react-i18next' import DrawerMenuItem from '../DrawerMenuItem' import RelayUrls from './RelayUrl' import { useRelaySetsSettingComponent } from './provider' export default function RelaySet({ relaySet }: { relaySet: TRelaySet }) { const { t } = useTranslation() const { expandedRelaySetId } = useRelaySetsSettingComponent() return (
{t('n relays', { n: relaySet.relayUrls.length })}
{expandedRelaySetId === relaySet.id && }
) } function RelaySetName({ relaySet }: { relaySet: TRelaySet }) { const [newSetName, setNewSetName] = useState(relaySet.name) const { updateRelaySet } = useFavoriteRelays() const { renamingRelaySetId, setRenamingRelaySetId } = useRelaySetsSettingComponent() const saveNewRelaySetName = () => { if (relaySet.name === newSetName) { return setRenamingRelaySetId(null) } updateRelaySet({ ...relaySet, name: newSetName }) setRenamingRelaySetId(null) } const handleRenameInputChange = (e: React.ChangeEvent) => { setNewSetName(e.target.value) } const handleRenameInputKeyDown = (event: React.KeyboardEvent) => { if (event.key === 'Enter') { event.preventDefault() saveNewRelaySetName() } } return renamingRelaySetId === relaySet.id ? (
) : (
{relaySet.name}
) } function RelayUrlsExpandToggle({ relaySetId, children }: { relaySetId: string children: React.ReactNode }) { const { expandedRelaySetId, setExpandedRelaySetId } = useRelaySetsSettingComponent() return (
setExpandedRelaySetId((pre) => (pre === relaySetId ? null : relaySetId))} >
{children}
) } function RelaySetOptions({ relaySet }: { relaySet: TRelaySet }) { const { t } = useTranslation() const { isSmallScreen } = useScreenSize() const { deleteRelaySet } = useFavoriteRelays() const { setRenamingRelaySetId } = useRelaySetsSettingComponent() const trigger = ( ) const rename = () => { setRenamingRelaySetId(relaySet.id) } const copyShareLink = () => { navigator.clipboard.writeText( `https://jumble.social/?${relaySet.relayUrls.map((url) => 'r=' + url).join('&')}` ) } if (isSmallScreen) { return ( {trigger}
{t('Rename')} {t('Copy share link')} deleteRelaySet(relaySet.id)} > {t('Delete')}
) } return ( {trigger} {t('Rename')} {t('Copy share link')} deleteRelaySet(relaySet.id)} > {t('Delete')} ) }