import React, { useCallback, useRef, useState } from 'react'; import { HMSRoomProvider, useHMSActions } from '@100mslive/react-sdk'; import { CheckCircleIcon, ConnectivityIcon, CrossCircleIcon, GlobeIcon, MicOnIcon, VideoOnIcon, } from '@100mslive/react-icons'; import { Box, Flex } from '../Layout'; import { Text } from '../Text'; import { HMSThemeProvider } from '../Theme'; import { AudioTest } from './AudioTest'; import { BrowserTest } from './BrowserTest'; import { ConnectivityTest } from './ConnectivityTest'; import { DiagnosticsContext, DiagnosticsStep, DiagnosticsStepInfo, initialSteps, useDiagnostics, } from './DiagnosticsContext'; import { VideoTest } from './VideoTest'; const DiagnosticsStepIcon: Record = { [DiagnosticsStep.VIDEO]: , [DiagnosticsStep.AUDIO]: , [DiagnosticsStep.BROWSER]: , [DiagnosticsStep.CONNECTIVITY]: , }; const Container = ({ children }: { children: React.ReactNode }) => ( {children} ); const DiagnosticsStepTest = () => { const { activeStepIndex } = useDiagnostics(); let TestComponent = () => <>; if (activeStepIndex === DiagnosticsStep.AUDIO) { TestComponent = AudioTest; } else if (activeStepIndex === DiagnosticsStep.VIDEO) { TestComponent = VideoTest; } else if (activeStepIndex === DiagnosticsStep.BROWSER) { TestComponent = BrowserTest; } else if (activeStepIndex === DiagnosticsStep.CONNECTIVITY) { TestComponent = ConnectivityTest; } return ; }; const DiagnosticsStepHeader = () => { const { activeStepIndex, activeStep } = useDiagnostics(); return ( {DiagnosticsStepIcon[activeStepIndex]} {activeStep.name} ); }; const DiagnosticsStepContainer = () => { return ( ); }; const DiagnosticsStepsList = () => { const { activeStepIndex, activeStep, steps } = useDiagnostics(); return ( {Object.keys(DiagnosticsStep) .filter(key => !isNaN(Number(key))) .map(key => { const keyIndex = Number(key); const step = steps[keyIndex as DiagnosticsStep]; const isStepCompleted = activeStepIndex > keyIndex || activeStep.isCompleted; let color = '$on_primary_low'; let icon = ; if (activeStepIndex === keyIndex) { color = '$on_primary_high'; icon = ; } if (isStepCompleted) { color = '$primary_bright'; icon = ; } if (step.hasFailed) { color = '$alert_error_default'; icon = ; } return ( {icon} {step.name} ); })} ); }; const DiagnosticsProvider = () => { const actions = useHMSActions(); const [activeStep, setActiveStep] = useState(0); const [steps, setSteps] = useState(initialSteps); const diagnosticsRef = useRef(actions.initDiagnostics()); const updateStep = useCallback((step: DiagnosticsStep, value: Omit) => { setSteps(prevSteps => ({ ...prevSteps, [step]: { ...prevSteps[step], ...value } })); }, []); return ( Pre-call Test Make sure your devices and network are good to go, let's get started. ); }; export const Diagnostics = () => { return ( ); };