import { commands } from "@/commands.gen"; import { GoBack } from "@/components"; import { Frame } from "@/components/frame"; import { Spinner } from "@/components/spinner"; import { ArrowLeft, Plus, X } from "@phosphor-icons/react"; import { createLazyFileRoute } from "@tanstack/react-router"; import { message } from "@tauri-apps/plugin-dialog"; import { relaunch } from "@tauri-apps/plugin-process"; import { useEffect, useState, useTransition } from "react"; export const Route = createLazyFileRoute("/bootstrap-relays")({ component: Screen, }); function Screen() { const bootstrapRelays = Route.useLoaderData(); const [relays, setRelays] = useState([]); const [newRelay, setNewRelay] = useState(""); const [isPending, startTransition] = useTransition(); const add = () => { try { let url = newRelay; if (!url.startsWith("wss://")) { url = `wss://${url}`; } // Validate URL const relay = new URL(url); // Update setRelays((prev) => [...prev, relay.toString()]); setNewRelay(""); } catch { message("URL is not valid.", { kind: "error" }); } }; const remove = (relay: string) => { setRelays((prev) => prev.filter((item) => item !== relay)); }; const submit = () => { startTransition(async () => { if (!relays.length) { await message("You need to add at least 1 relay", { title: "Manage Relays", kind: "info", }); return; } const merged = relays.join("\r\n"); const res = await commands.setBootstrapRelays(merged); if (res.status === "ok") { return await relaunch(); } else { await message(res.error, { title: "Manage Relays", kind: "error", }); return; } }); }; useEffect(() => { setRelays(bootstrapRelays); }, [bootstrapRelays]); return (

Manage Relays

The default relays that Lume will connected.

setNewRelay(e.target.value)} onKeyDown={(e) => { if (e.key === "Enter") add(); }} className="flex-1 px-3 rounded-lg h-9 bg-transparent border border-neutral-200 dark:border-neutral-800 focus:border-blue-500 focus:outline-none placeholder:text-neutral-400 dark:placeholder:text-neutral-600" />
{relays.map((relay) => (
{relay}
))}

Lume is heavily depend on Negentropy for syncing data. You need to use at least 1 relay that support Negentropy. If you not sure, you can keep using the default relay list.

Lume will relaunch after saving.
Back
); }