import React, { useCallback, useEffect, useState } from "react"; import { useHistory } from "react-router-dom"; import { GroupCallState } from "matrix-js-sdk/src/webrtc/groupCall"; import { useGroupCall } from "./useGroupCall"; import { ErrorView, FullScreenView } from "../FullScreenView"; import { LobbyView } from "./LobbyView"; import { InCallView } from "./InCallView"; import { PTTCallView } from "./PTTCallView"; import { CallEndedView } from "./CallEndedView"; import { useSentryGroupCallHandler } from "./useSentryGroupCallHandler"; import { useLocationNavigation } from "../useLocationNavigation"; export function GroupCallView({ client, isPasswordlessUser, roomId, groupCall, }) { const [showInspector, setShowInspector] = useState( () => !!localStorage.getItem("matrix-group-call-inspector") ); const onChangeShowInspector = useCallback((show) => { setShowInspector(show); if (show) { localStorage.setItem("matrix-group-call-inspector", "true"); } else { localStorage.removeItem("matrix-group-call-inspector"); } }, []); const { state, error, activeSpeaker, userMediaFeeds, microphoneMuted, localVideoMuted, localCallFeed, initLocalCallFeed, enter, leave, toggleLocalVideoMuted, toggleMicrophoneMuted, toggleScreensharing, requestingScreenshare, isScreensharing, localScreenshareFeed, screenshareFeeds, hasLocalParticipant, participants, } = useGroupCall(groupCall); useEffect(() => { window.groupCall = groupCall; }, [groupCall]); useSentryGroupCallHandler(groupCall); useLocationNavigation(requestingScreenshare); const [left, setLeft] = useState(false); const history = useHistory(); const onLeave = useCallback(() => { setLeft(true); leave(); if (!isPasswordlessUser) { history.push("/"); } }, [leave, history]); if (error) { return ; } else if (state === GroupCallState.Entered) { if (groupCall.isPtt) { return ( ); } else { return ( ); } } else if (state === GroupCallState.Entering) { return (

Entering room...

); } else if (left) { return ; } else { return ( ); } }