import React, { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import * as config from '../../config'; const Settings = ({ chime, closeSettings, saveSettings, joinInfo }) => { const [microphone, setMicrophone] = useState(''); const [speaker, setSpeaker] = useState(''); const [camera, setCamera] = useState(''); const devicesUpdatedCallback = (fullDeviceInfo) => { if (config.DEBUG) console.log(fullDeviceInfo); }; useEffect(() => { document.addEventListener('keydown', handleKeyDown); chime.subscribeToDevicesUpdated(devicesUpdatedCallback); return () => { document.removeEventListener('keydown', handleKeyDown); chime.unsubscribeFromDevicesUpdated(devicesUpdatedCallback); }; }); const handleKeyDown = (e) => { if (e.keyCode === 27) { // keyCode 27 is Escape key closeSettings(); } }; const handleMicrophoneChange = (e) => { setMicrophone(e.target.value); if (chime.audioInputDevices.length) { let selectedDevice; let o; for (o in chime.audioInputDevices) { if (chime.audioInputDevices[o].value === e.target.value) { selectedDevice = chime.audioInputDevices[o]; break; } } chime.chooseAudioInputDevice(selectedDevice); } }; const handleSpeakerChange = (e) => { setSpeaker(e.target.value); if (chime.audioOutputDevices.length) { let selectedDevice; let o; for (o in chime.audioOutputDevices) { if (chime.audioOutputDevices[o].value === e.target.value) { selectedDevice = chime.audioOutputDevices[o]; break; } } chime.chooseAudioOutputDevice(selectedDevice); } }; const handleCameraChange = async (e) => { setCamera(e.target.value); if (chime.videoInputDevices.length) { let selectedDevice; let o; for (o in chime.videoInputDevices) { if (chime.videoInputDevices[o].value === e.target.value) { selectedDevice = chime.videoInputDevices[o]; break; } } chime.chooseVideoInputDevice(selectedDevice); } }; const handleSave = (e) => { e.stopPropagation(); e.preventDefault(); saveSettings(microphone, speaker, camera); }; const renderDevices = (devices, defaultValue, label) => { if (devices && devices.length) { return devices.map((device) => { return ( ); }); } else { return ( ); } }; const currentMic = chime.currentAudioInputDevice; const currentSpeaker = chime.currentAudioOutputDevice; const currentCam = chime.currentVideoInputDevice; const availableMics = chime.audioInputDevices; const availableSpeakers = chime.audioOutputDevices; const availableCams = chime.videoInputDevices; return (