import React from 'react'; import { HMSPeerID, HMSTrack, selectAudioTrackByPeerID, selectAudioVolumeByPeerID, selectPermissions, selectVideoTrackByPeerID, useHMSActions, useHMSStore, } from '@100mslive/react-sdk'; import { HorizontalMenuIcon, MicOffIcon, MicOnIcon, RemoveUserIcon, SpeakerIcon, VideoOffIcon, VideoOnIcon, } from '@100mslive/react-icons'; import { Slider } from '../Slider'; import { Flex, StyledMenuTile } from './StyledMenuTile'; export interface TileMenuProps { peerId: HMSPeerID; } export const TileMenu: React.FC = ({ peerId }) => { const actions = useHMSActions(); const permissions = useHMSStore(selectPermissions); // TODO: selectTrackByID vs selectVideoTrackByPeerID const videoTrack = useHMSStore(selectVideoTrackByPeerID(peerId)); const audioTrack = useHMSStore(selectAudioTrackByPeerID(peerId)); const canMuteVideo = videoTrack?.enabled ? permissions?.mute : permissions?.unmute; const canMuteAudio = audioTrack?.enabled ? permissions?.mute : permissions?.unmute; const toggleTrackEnabled = async (track?: HMSTrack | null) => { if (track) { try { await actions.setRemoteTrackEnabled(track.id, !track.enabled); } catch (error) { // TODO: add toast here } } }; const trackVolume = useHMSStore(selectAudioVolumeByPeerID(peerId)); return ( {canMuteVideo ? ( toggleTrackEnabled(videoTrack)}> {videoTrack?.enabled ? : } {`${videoTrack?.enabled ? 'Mute' : 'Unmute'} Video`} ) : null} {canMuteAudio ? ( toggleTrackEnabled(audioTrack)}> {audioTrack?.enabled ? : } {`${audioTrack?.enabled ? 'Mute' : 'Unmute'} Audio`} ) : null} {audioTrack ? ( Volume ({trackVolume}) actions.setVolume(e[0], audioTrack?.id)} /> ) : null} {permissions?.removeOthers ? ( { try { await actions.removePeer(peerId, ''); } catch (error) { // TODO: Toast here } }} > Remove Participant ) : null} ); };