import "./Relay.css" import { faPlug, faTrash, faSquareCheck, faSquareXmark, faWifi, faUpload, faDownload, faPlugCircleXmark, faEllipsisVertical } from "@fortawesome/free-solid-svg-icons"; import useRelayState from "../feed/RelayState"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useMemo, useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import { removeRelay, setRelays } from "../state/Login"; import { RootState } from "../state/Store"; import { RelaySettings } from "../nostr/Connection"; export interface RelayProps { addr: string } export default function Relay(props: RelayProps) { const dispatch = useDispatch(); 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]); const [showExtra, setShowExtra] = useState(false); 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}
setShowExtra(s => !s)}>
{showExtra ?
{state?.events.send}
{state?.events.received}
Delete dispatch(removeRelay(props.addr))}>
: null} ) }