import { Button } from '@/components/ui/button' import { useFetchRelayInfos } from '@/hooks' import { useRelaySettings } from '@/providers/RelaySettingsProvider' import client from '@/services/client.service' import { Save, SearchCheck } from 'lucide-react' import { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' export default function TemporaryRelayGroup() { const { t } = useTranslation() const { temporaryRelayUrls, relayGroups, addRelayGroup, switchRelayGroup } = useRelaySettings() const [relays, setRelays] = useState< { url: string isConnected: boolean }[] >(temporaryRelayUrls.map((url) => ({ url, isConnected: false }))) const { relayInfos } = useFetchRelayInfos(relays.map((relay) => relay.url)) useEffect(() => { const interval = setInterval(() => { const connectionStatusMap = client.listConnectionStatus() setRelays((pre) => { return pre.map((relay) => { const isConnected = connectionStatusMap.get(relay.url) || false return { ...relay, isConnected } }) }) }, 1000) return () => clearInterval(interval) }, []) useEffect(() => { setRelays(temporaryRelayUrls.map((url) => ({ url, isConnected: false }))) }, [temporaryRelayUrls]) if (!relays.length) { return null } const handleSave = () => { const existingTemporaryIndexes = relayGroups .filter((group) => /^Temporary \d+$/.test(group.groupName)) .map((group) => group.groupName.split(' ')[1]) .map(Number) .filter((index) => !isNaN(index)) const nextIndex = Math.max(...existingTemporaryIndexes, 0) + 1 const groupName = `Temporary ${nextIndex}` addRelayGroup(groupName, temporaryRelayUrls) switchRelayGroup(groupName) } return (