diff --git a/src/pages/peers/PeerTable.tsx b/src/pages/peers/PeerTable.tsx index 18fbc88..2b51c66 100644 --- a/src/pages/peers/PeerTable.tsx +++ b/src/pages/peers/PeerTable.tsx @@ -27,28 +27,41 @@ interface Props { peers: Peer[] | null } +interface PeerLatency { + rtt: string + loading: boolean +} + +function getPingState(peerLatency: Record, peer: Peer): ReactElement { + if (peerLatency[peer.address]?.loading) return + + if (peerLatency[peer.address]?.rtt) return {peerLatency[peer.address]?.rtt} + + return +} + function PeerTable(props: Props): ReactElement { const classes = useStyles() const { beeDebugApi } = useContext(SettingsContext) - const [peerLatency, setPeerLatency] = useState([{ peerId: '', rtt: '', loading: false }]) + const [peerLatency, setPeerLatency] = useState>({}) - const PingPeer = (peerId: string) => { - setPeerLatency([...peerLatency, { peerId: peerId, rtt: '', loading: true }]) + const pingPeer = (peerId: string) => { + setPeerLatency(prevPeerLatency => ({ ...prevPeerLatency, [peerId]: { rtt: '', loading: true } })) beeDebugApi ?.pingPeer(peerId) .then(res => { - setPeerLatency([...peerLatency, { peerId: peerId, rtt: res.rtt, loading: false }]) + setPeerLatency(prevPeerLatency => ({ ...prevPeerLatency, [peerId]: { rtt: res.rtt, loading: false } })) }) .catch(() => { - setPeerLatency([...peerLatency, { peerId: peerId, rtt: 'error', loading: false }]) + setPeerLatency(prevPeerLatency => ({ ...prevPeerLatency, [peerId]: { rtt: 'error', loading: false } })) }) } return (
- +
Index @@ -65,21 +78,8 @@ function PeerTable(props: Props): ReactElement { {peer.address} -