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')}
)
}