import { FC, useState } from 'react' import { Stack, Toggle } from '@fluentui/react' import Video from '../comps/video' import { classes } from './styles' import { dummyAudioDevice, dummyVideoDevice, startMediaDevice, stopMediaDevice, useCreateFormState, useJoinFormState, useLocalState, } from '../state' import { commonClasses } from '../utils/theme/common-styles' const VideoPreview: FC = () => { const [mediaBtnsDisabled, setMediaBtnsDisabled] = useState(false) const [ userStream, currentCameraId, currentMicId, audioDevices, videoDevices, ] = useLocalState(state => [ state.userStream, state.currentCameraId, state.currentMicId, state.audioDevices, state.videoDevices, ]) const [createPageName] = useCreateFormState(state => [state.userName]) const [joinPageName] = useJoinFormState(state => [state.userName]) const userName = createPageName || joinPageName const audioDevice = audioDevices.find(d => d.deviceId === currentMicId) const videoDevice = videoDevices.find(d => d.deviceId === currentCameraId) const mediaInfo = [videoDevice?.label, audioDevice?.label] .filter(Boolean) .join('\n') .trim() return ( { setMediaBtnsDisabled(true) if (checked) { await startMediaDevice(audioDevices[0] || dummyAudioDevice) } else { stopMediaDevice(audioDevices[0] || dummyAudioDevice) } setMediaBtnsDisabled(false) }} checked={!!currentMicId} inlineLabel label="Audio" onText="On" disabled={mediaBtnsDisabled} offText="Off" /> { setMediaBtnsDisabled(true) if (checked) { await startMediaDevice(videoDevices[0] || dummyVideoDevice) } else { stopMediaDevice(videoDevices[0] || dummyVideoDevice) } setMediaBtnsDisabled(false) }} checked={!!currentCameraId} inlineLabel label="Video" onText="On" disabled={mediaBtnsDisabled} offText="Off" /> ) } export default VideoPreview