import "./Relay.css" 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 { useNavigate } from "react-router-dom"; export interface RelayProps { addr: string } export default function Relay(props: RelayProps) { const dispatch = useDispatch(); const navigate = useNavigate(); const allRelaySettings = useSelector>(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) })); } let latency = Math.floor(state?.avgLatency ?? 0); return ( <>
{name}
Write configure({ write: !relaySettings.write, read: relaySettings.read })}>
Read configure({ write: relaySettings.write, read: !relaySettings.read })}>
{latency > 2000 ? `${(latency / 1000).toFixed(0)} secs` : `${latency.toLocaleString()} ms`}   {state?.disconnects}
navigate(state!.id)}>
) }