import React, { useCallback, useMemo, useEffect, useState } from 'react'; import { Aside } from '@custom/shared/components/Aside'; import { useCallState } from '../../contexts/CallProvider'; import { useUIState } from '../../contexts/UIStateProvider'; import Capsule from '../Capsule'; export const NETWORK_ASIDE = 'network'; const NETWORK_QUALITY_LABELS = { low: 'Low', 'very-low': 'Very Low', good: 'Good', }; export const NetworkAside = () => { const { callObject } = useCallState(); const { showAside, setShowAside } = useUIState(); const [networkStats, setNetworkStats] = useState(); const updateStats = useCallback(async () => { setNetworkStats(await callObject.getNetworkStats()); }, [callObject]); useEffect(() => { if (!callObject) return; updateStats(); const i = setInterval(updateStats, 2000); return () => clearInterval(i); }, [callObject, updateStats]); const downloadKbs = useMemo( () => Math.round( (networkStats?.stats?.latest?.videoRecvBitsPerSecond ?? 0) / 1000 ), [networkStats?.stats?.latest?.videoRecvBitsPerSecond] ); const uploadKbs = useMemo( () => Math.round( (networkStats?.stats?.latest?.videoSendBitsPerSecond ?? 0) / 1000 ), [networkStats?.stats?.latest?.videoSendBitsPerSecond] ); if (!showAside || showAside !== NETWORK_ASIDE) { return null; } return ( ); }; export default NetworkAside;