import "./Relay.css"; import { useMemo } from "react"; import { useIntl, FormattedMessage } from "react-intl"; import { useNavigate } from "react-router-dom"; import { useDispatch, useSelector } from "react-redux"; 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 { setRelays } from "State/Login"; import { RootState } from "State/Store"; import { System } from "System"; import { getRelayName, unwrap } from "Util"; import messages from "./messages"; export interface RelayProps { addr: string; } export default function Relay(props: RelayProps) { const dispatch = useDispatch(); const { formatMessage } = useIntl(); const navigate = useNavigate(); const allRelaySettings = useSelector>(s => s.login.relays); const relaySettings = unwrap(allRelaySettings[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) { dispatch( setRelays({ relays: { ...allRelaySettings, [props.addr]: o, }, createdAt: Math.floor(new Date().getTime() / 1000), }) ); } 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 ?? "")}>
); }