@@ -67,6 +67,7 @@ import {
6767 useSetting ,
6868} from "../settings/settings" ;
6969import { useTypedEventEmitter } from "../useEvents" ;
70+ import { useGroupCallErrorBoundary } from "./useCallErrorBoundary.ts" ;
7071
7172declare global {
7273 interface Window {
@@ -120,11 +121,13 @@ export const GroupCallView: FC<Props> = ({
120121 } ;
121122 } , [ rtcSession ] ) ;
122123
124+ const { showGroupCallErrorBoundary } = useGroupCallErrorBoundary ( ) ;
125+
123126 useTypedEventEmitter (
124127 rtcSession ,
125128 MatrixRTCSessionEvent . MembershipManagerError ,
126129 ( error ) => {
127- setError (
130+ showGroupCallErrorBoundary (
128131 new RTCSessionError (
129132 ErrorCode . MEMBERSHIP_MANAGER_UNRECOVERABLE ,
130133 error . message ?? error ,
@@ -173,30 +176,32 @@ export const GroupCallView: FC<Props> = ({
173176 const latestDevices = useLatest ( deviceContext ) ;
174177 const latestMuteStates = useLatest ( muteStates ) ;
175178
176- const enterRTCSessionOrError = async (
177- rtcSession : MatrixRTCSession ,
178- perParticipantE2EE : boolean ,
179- newMembershipManager : boolean ,
180- ) : Promise < void > => {
181- try {
182- await enterRTCSession (
183- rtcSession ,
184- perParticipantE2EE ,
185- newMembershipManager ,
186- ) ;
187- } catch ( e ) {
188- if ( e instanceof ElementCallError ) {
189- // e.code === ErrorCode.MISSING_LIVE_KIT_SERVICE_URL)
190- setError ( e ) ;
191- } else {
192- logger . error ( `Unknown Error while entering RTC session` , e ) ;
193- const error = new UnknownCallError (
194- e instanceof Error ? e : new Error ( "Unknown error" , { cause : e } ) ,
179+ const enterRTCSessionOrError = useCallback (
180+ async (
181+ rtcSession : MatrixRTCSession ,
182+ perParticipantE2EE : boolean ,
183+ newMembershipManager : boolean ,
184+ ) : Promise < void > => {
185+ try {
186+ await enterRTCSession (
187+ rtcSession ,
188+ perParticipantE2EE ,
189+ newMembershipManager ,
195190 ) ;
196- setError ( error ) ;
191+ } catch ( e ) {
192+ if ( e instanceof ElementCallError ) {
193+ showGroupCallErrorBoundary ( e ) ;
194+ } else {
195+ logger . error ( `Unknown Error while entering RTC session` , e ) ;
196+ const error = new UnknownCallError (
197+ e instanceof Error ? e : new Error ( "Unknown error" , { cause : e } ) ,
198+ ) ;
199+ showGroupCallErrorBoundary ( error ) ;
200+ }
197201 }
198- }
199- } ;
202+ } ,
203+ [ showGroupCallErrorBoundary ] ,
204+ ) ;
200205
201206 useEffect ( ( ) => {
202207 const defaultDeviceSetup = async ( {
@@ -289,11 +294,12 @@ export const GroupCallView: FC<Props> = ({
289294 perParticipantE2EE ,
290295 latestDevices ,
291296 latestMuteStates ,
297+ enterRTCSessionOrError ,
292298 useNewMembershipManager ,
293299 ] ) ;
294300
295301 const [ left , setLeft ] = useState ( false ) ;
296- const [ error , setError ] = useState < ElementCallError | null > ( null ) ;
302+
297303 const navigate = useNavigate ( ) ;
298304
299305 const onLeave = useCallback (
@@ -416,14 +422,7 @@ export const GroupCallView: FC<Props> = ({
416422 ) ;
417423
418424 let body : ReactNode ;
419- if ( error ) {
420- // If an ElementCallError was recorded, then create a component that will fail to render and throw
421- // the error. This will then be handled by the ErrorBoundary component.
422- const ErrorComponent = ( ) : ReactNode => {
423- throw error ;
424- } ;
425- body = < ErrorComponent /> ;
426- } else if ( isJoined ) {
425+ if ( isJoined ) {
427426 body = (
428427 < >
429428 { shareModal }
0 commit comments