import NoteList from '@/components/NoteList' import RelayInfo from '@/components/RelayInfo' import SaveRelayDropdownMenu from '@/components/SaveRelayDropdownMenu' import SearchInput from '@/components/SearchInput' import { Button } from '@/components/ui/button' import { useFetchRelayInfo } from '@/hooks' import SecondaryPageLayout from '@/layouts/SecondaryPageLayout' import { normalizeUrl, simplifyUrl } from '@/lib/url' import { Check, Copy, Link } from 'lucide-react' import { forwardRef, useEffect, useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' import { toast } from 'sonner' import NotFoundPage from '../NotFoundPage' const RelayPage = forwardRef(({ url, index }: { url?: string; index?: number }, ref) => { const { t } = useTranslation() const normalizedUrl = useMemo(() => (url ? normalizeUrl(url) : undefined), [url]) const { relayInfo } = useFetchRelayInfo(normalizedUrl) const title = useMemo(() => (url ? simplifyUrl(url) : undefined), [url]) const [searchInput, setSearchInput] = useState('') const [debouncedInput, setDebouncedInput] = useState(searchInput) useEffect(() => { const handler = setTimeout(() => { setDebouncedInput(searchInput) }, 1000) return () => { clearTimeout(handler) } }, [searchInput]) if (!normalizedUrl) { return } return ( } displayScrollToTopButton > {relayInfo?.supported_nips?.includes(50) && (
setSearchInput(e.target.value)} placeholder={t('Search')} />
)}
) }) RelayPage.displayName = 'RelayPage' export default RelayPage function RelayPageControls({ url }: { url: string }) { const [copiedUrl, setCopiedUrl] = useState(false) const [copiedShareableUrl, setCopiedShareableUrl] = useState(false) const handleCopyUrl = () => { navigator.clipboard.writeText(url) setCopiedUrl(true) setTimeout(() => setCopiedUrl(false), 2000) } const handleCopyShareableUrl = () => { navigator.clipboard.writeText(`https://jumble.social/?r=${url}`) setCopiedShareableUrl(true) toast.success('Shareable URL copied to clipboard') setTimeout(() => setCopiedShareableUrl(false), 2000) } return ( <> ) }