import "./Relay.css"; import { useMemo } from "react"; import { useIntl, FormattedMessage } from "react-intl"; import { useNavigate } from "react-router-dom"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faPlug, faSquareCheck, faSquareXmark, faWifi, faPlugCircleXmark, faGear, faWarning, } from "@fortawesome/free-solid-svg-icons"; import { RelaySettings } from "@snort/nostr"; import useRelayState from "Feed/RelayState"; import { System } from "System"; import { getRelayName, unixNowMs, unwrap } from "Util"; import messages from "./messages"; import useLogin from "Hooks/useLogin"; import { setRelays } from "Login"; export interface RelayProps { addr: string; } export default function Relay(props: RelayProps) { const { formatMessage } = useIntl(); const navigate = useNavigate(); const login = useLogin(); const relaySettings = unwrap(login.relays.item[props.addr] ?? System.Sockets.get(props.addr)?.Settings ?? {}); const state = useRelayState(props.addr); const name = useMemo(() => getRelayName(props.addr), [props.addr]); function configure(o: RelaySettings) { setRelays( login, { ...login.relays.item, [props.addr]: o, }, unixNowMs() ); } const latency = Math.floor(state?.avgLatency ?? 0); return ( <>
{name}
configure({ write: !relaySettings.write, read: relaySettings.read, }) }>
configure({ write: relaySettings.write, read: !relaySettings.read, }) }>
{latency > 2000 ? formatMessage(messages.Seconds, { n: (latency / 1000).toFixed(0), }) : formatMessage(messages.Milliseconds, { n: latency.toLocaleString(), })}   {state?.disconnects} {state?.pendingRequests?.length}
navigate(state?.id ?? "")}>
); }