import { Button } from '@/components/ui/button' import { useFetchRelayInfos } from '@/hooks' import { simplifyUrl } from '@/lib/url' import { useFeed } from '@/providers/FeedProvider' import { useRelaySets } from '@/providers/RelaySetsProvider' 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 TemporaryRelaySet() { const { t } = useTranslation() const { temporaryRelayUrls, switchFeed } = useFeed() const { addRelaySet } = useRelaySets() 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 relaySetName = temporaryRelayUrls.length === 1 ? simplifyUrl(temporaryRelayUrls[0]) : 'Temporary' const id = addRelaySet(relaySetName, temporaryRelayUrls) switchFeed('relays', { activeRelaySetId: id }) } return (