import { useQuery } from '@tanstack/react-query'; import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { toast } from 'sonner'; import { useStorage } from '@libs/storage/provider'; import { ArrowLeftIcon, CheckCircleIcon, LoaderIcon } from '@shared/icons'; import { User } from '@shared/user'; import { useOnboarding } from '@stores/onboarding'; import { useNostr } from '@utils/hooks/useNostr'; export function OnboardRelaysScreen() { const navigate = useNavigate(); const toggleRelays = useOnboarding((state) => state.toggleRelays); const [loading, setLoading] = useState(false); const [relays, setRelays] = useState(new Set()); const { publish } = useNostr(); const { db } = useStorage(); const { getAllRelaysByUsers } = useNostr(); const { status, data } = useQuery( ['relays'], async () => { return await getAllRelaysByUsers(); }, { refetchOnWindowFocus: false, } ); const toggleRelay = (relay: string) => { if (relays.has(relay)) { setRelays((prev) => { prev.delete(relay); return new Set(prev); }); } else { setRelays((prev) => new Set(prev.add(relay))); } }; const submit = async () => { try { setLoading(true); for (const relay of relays) { await db.createRelay(relay); } const tags = Array.from(relays).map((relay) => ['r', relay.replace(/\/+$/, '')]); await publish({ content: '', kind: 10002, tags: tags }); toggleRelays(); navigate(-1); } catch (e) { setLoading(false); toast.error(e); } }; return (

Relay discovery

{status === 'loading' ? (
) : data.size === 0 ? (

Lume couldn't find any relays from your follows.
You can skip this step and use default relays instead.

) : ( [...data].map(([key, value]) => ( )) )}
); }