import clsx from 'clsx'; import { useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import { VoicingInfo, updatePin } from '../../../app/slices/voice'; import { useAppSelector } from '../../../app/store'; import Avatar from '../../../common/component/Avatar'; // import IconHeadphone from '../../../assets/icons/sound.on.svg'; // import IconHeadphoneOff from '../../../assets/icons/sound.off.svg'; import IconMic from '../../../assets/icons/mic.on.svg'; import IconMicOff from '../../../assets/icons/mic.off.svg'; import IconCameraOff from '../../../assets/icons/camera.off.svg'; import IconCamera from '../../../assets/icons/camera.svg'; import IconFullscreen from '../../../assets/icons/fullscreen.svg'; import IconScreen from '../../../assets/icons/share.screen.svg'; import IconCallOff from '../../../assets/icons/call.off.svg'; import StyledButton from '../../../common/component/styled/Button'; import Tooltip from '../../../common/component/Tooltip'; import { playAgoraVideo } from '../../../common/utils'; import { ChatContext } from '../../../types/common'; import { updateChannelVisibleAside } from '../../../app/slices/footprint'; import { useDispatch } from 'react-redux'; // import User from '../../../common/component/User'; type Props = { id: number, context: ChatContext, info: VoicingInfo | null, setMute: (param: boolean) => void, leave: () => void, closeCamera: () => void, openCamera: () => void, startShareScreen: () => void, stopShareScreen: () => void } const VoiceManagement = ({ id, context, info, setMute, leave, closeCamera, openCamera, startShareScreen, stopShareScreen }: Props) => { const { t } = useTranslation("chat"); const dispatch = useDispatch(); const { userData, voicingMembers } = useAppSelector(store => { return { userData: store.users.byId, voicingMembers: store.voice.voicingMembers }; }); useEffect(() => { const ids = voicingMembers.ids; ids.forEach(id => { playAgoraVideo(id); }); }, [voicingMembers.ids]); const handleFullscreen = (uid?: number) => { if (context == "channel") { dispatch(updateChannelVisibleAside({ id, aside: "voice_fullscreen" })); if (uid) { dispatch(updatePin({ uid, action: "pin" })); } } }; if (!info) return null; const { muted, video, shareScreen } = info; const nameClass = clsx(`text-sm text-gray-500 max-w-[120px] truncate font-semibold dark:text-white`); const members = voicingMembers.ids; const membersData = voicingMembers.byId; if (info.joining) { return
Connecting to voice channel...
; } if (info.connectionState == "RECONNECTING") { return
Reconnecting... Please check network connection!
; } return (
); }; export default VoiceManagement;