import React from "react"; import { useLocation, useNavigate } from "react-router"; import { toast } from "sonner"; import AppHeader from "src/components/AppHeader"; import { LoadingButton } from "src/components/ui/custom/loading-button"; import { Input } from "src/components/ui/input"; import { Label } from "src/components/ui/label"; import { splitSocketAddress } from "src/lib/utils"; import { ConnectPeerRequest } from "src/types"; import { request } from "src/utils/request"; import { safeReturnToUrl } from "src/utils/safeReturnToUrl"; export default function ConnectPeer() { const navigate = useNavigate(); const location = useLocation(); const queryParams = new URLSearchParams(location.search); const [isLoading, setLoading] = React.useState(false); const [connectionString, setConnectionString] = React.useState( queryParams.get("peer") ?? "" ); const returnTo = safeReturnToUrl(queryParams.get("return_to")) ?? ""; const handleSubmit = async (event: React.FormEvent) => { event.preventDefault(); try { if (!connectionString) { throw new Error("connection details missing"); } const [pubkey, socketAddress] = connectionString.split("@"); const { address, port } = splitSocketAddress(socketAddress); if (!pubkey || !address || !port) { throw new Error("connection details missing"); } console.info(`🔌 Peering with ${pubkey}`); const connectPeerRequest: ConnectPeerRequest = { pubkey, address, port: +port, }; setLoading(true); await request("/api/peers", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(connectPeerRequest), }); toast("Successfully connected with peer"); if (returnTo) { window.location.href = returnTo; return; } setConnectionString(""); navigate("/peers"); } catch (e) { toast.error("Failed to connect peer", { description: "" + e, }); console.error(e); } setLoading(false); }; return (
{ setConnectionString(e.target.value.trim()); }} />
{returnTo && (

You will automatically return to {returnTo}

)}
Connect
); }