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