import React, { useState, createRef, useEffect } from 'react'; import PropTypes from 'prop-types'; const LocalVideo = (props) => { const [enabled, setEnabled] = useState(false); const [muted, setMuted] = useState(false); const [showMeta, setShowMeta] = useState(true); const videoElement = createRef(); const rosterCallback = (newRoster) => { let attendeeId; for (attendeeId in newRoster) { // Exclude others if (attendeeId !== props.joinInfo.Attendee.AttendeeId) { continue; } setMuted(newRoster[attendeeId].muted); } }; useEffect(() => { setTimeout(() => { setShowMeta(false); }, 2500); props.chime.audioVideo.addObserver({ videoTileDidUpdate: (tileState) => { if ( !tileState.boundAttendeeId || !tileState.localTile || !tileState.tileId || !videoElement.current ) { return; } props.chime.audioVideo.bindVideoElement( tileState.tileId, videoElement.current, ); setEnabled(tileState.active); }, }); props.chime.subscribeToRosterUpdate(rosterCallback); return () => { props.chime.unsubscribeFromRosterUpdate(rosterCallback); }; }); // always show metadata when muted const isMetaShown = showMeta || muted || !enabled; const micMuteCls = muted ? 'controls__btn--mic_on' : 'controls__btn--mic_off'; const metaCls = isMetaShown ? '' : ' cam__meta--hide'; return (