import { useArk, useRelaylist } from "@lume/ark"; import { CancelIcon, LoaderIcon, RefreshIcon } from "@lume/icons"; import { cn } from "@lume/utils"; import { NDKKind, NDKSubscriptionCacheUsage } from "@nostr-dev-kit/ndk"; import { useQuery } from "@tanstack/react-query"; import { useTranslation } from "react-i18next"; import { RelayForm } from "./relayForm"; export function RelaySidebar({ className }: { className?: string }) { const ark = useArk(); const { t } = useTranslation(); const { removeRelay } = useRelaylist(); const { status, data, isRefetching, refetch } = useQuery({ queryKey: ["relay-personal"], queryFn: async () => { const event = await ark.getEventByFilter({ filter: { kinds: [NDKKind.RelayList], authors: [ark.account.pubkey], }, cache: NDKSubscriptionCacheUsage.ONLY_RELAY, }); if (!event) return []; return event.tags.filter((tag) => tag[0] === "r"); }, refetchOnWindowFocus: false, refetchOnMount: false, refetchOnReconnect: false, staleTime: Infinity, }); const currentRelays = new Set( ark.ndk.pool.connectedRelays().map((item) => item.url), ); return (

{t("relays.sidebar.title")}

{status === "pending" ? (
) : !data.length ? (

{t("relays.sidebar.empty")}

) : ( data.map((item) => (
{currentRelays.has(item[1]) ? ( ) : ( )}

{item[1] .replace("wss://", "") .replace("ws://", "") .replace("/", "")}

{item[2]?.length ? (
{item[2]}
) : null}
)) )}
); }