import "./Relay.css"; import { useIntl, FormattedMessage } from "react-intl"; import { useNavigate } from "react-router-dom"; import { faPlug, faSquareCheck, faSquareXmark, faWifi, faPlugCircleXmark, faGear, } from "@fortawesome/free-solid-svg-icons"; import useRelayState from "Feed/RelayState"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useMemo } from "react"; import { useDispatch, useSelector } from "react-redux"; import { setRelays } from "State/Login"; import { RootState } from "State/Store"; import { RelaySettings } from "Nostr/Connection"; 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< RootState, Record >((s) => s.login.relays); const relaySettings = allRelaySettings[props.addr]; const state = useRelayState(props.addr); const name = useMemo(() => new URL(props.addr).host, [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}
navigate(state?.id ?? "")} >
); }