Skip to content

Commit 82ba2d0

Browse files
authored
Forward disconnectReason to onDisconnected callback (#1031)
1 parent 92e2c17 commit 82ba2d0

File tree

5 files changed

+36
-28
lines changed

5 files changed

+36
-28
lines changed

.changeset/tasty-dogs-relate.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@livekit/components-react": patch
3+
---
4+
5+
Forward disconnectReason to onDisconnected callback

packages/core/etc/components-core.api.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ export function connectedParticipantsObserver(room: Room, options?: ConnectedPar
106106
export function connectionStateObserver(room: Room): Observable<ConnectionState>;
107107

108108
// @public (undocumented)
109-
export function createActiveDeviceObservable(room: Room, kind: MediaDeviceKind): Observable<string | undefined>;
109+
export function createActiveDeviceObservable(room: Room, kind: MediaDeviceKind): Observable<string>;
110110

111111
// @public (undocumented)
112112
export function createChatObserver(room: Room): Observable<[message: ChatMessage, participant?: LocalParticipant | RemoteParticipant | undefined]>;

packages/react/etc/components-react.api.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { ConnectionQuality } from 'livekit-client';
1111
import { ConnectionState as ConnectionState_2 } from 'livekit-client';
1212
import { CreateLocalTracksOptions } from 'livekit-client';
1313
import { DataPublishOptions } from 'livekit-client';
14+
import { DisconnectReason } from 'livekit-client';
1415
import { HTMLAttributes } from 'react';
1516
import { LocalAudioTrack } from 'livekit-client';
1617
import { LocalParticipant } from 'livekit-client';
@@ -368,7 +369,7 @@ export interface LiveKitRoomProps extends Omit<React_2.HTMLAttributes<HTMLDivEle
368369
// (undocumented)
369370
onConnected?: () => void;
370371
// (undocumented)
371-
onDisconnected?: () => void;
372+
onDisconnected?: (reason?: DisconnectReason) => void;
372373
// (undocumented)
373374
onEncryptionError?: (error: Error) => void;
374375
// (undocumented)

packages/react/src/components/LiveKitRoom.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type {
22
AudioCaptureOptions,
3+
DisconnectReason,
34
RoomConnectOptions,
45
RoomOptions,
56
ScreenShareCaptureOptions,
@@ -64,7 +65,7 @@ export interface LiveKitRoomProps extends Omit<React.HTMLAttributes<HTMLDivEleme
6465
*/
6566
connectOptions?: RoomConnectOptions;
6667
onConnected?: () => void;
67-
onDisconnected?: () => void;
68+
onDisconnected?: (reason?: DisconnectReason) => void;
6869
onError?: (error: Error) => void;
6970
onMediaDeviceFailure?: (failure?: MediaDeviceFailure) => void;
7071
onEncryptionError?: (error: Error) => void;

packages/react/src/hooks/useLiveKitRoom.ts

+26-25
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { log, setupLiveKitRoom } from '@livekit/components-core';
2-
import { Room, MediaDeviceFailure, RoomEvent, ConnectionState } from 'livekit-client';
2+
import type { DisconnectReason } from 'livekit-client';
3+
import { Room, MediaDeviceFailure, RoomEvent } from 'livekit-client';
34
import * as React from 'react';
45
import type { HTMLAttributes } from 'react';
56

@@ -89,18 +90,39 @@ export function useLiveKitRoom<T extends HTMLElement>(
8990
const handleEncryptionError = (e: Error) => {
9091
onEncryptionError?.(e);
9192
};
93+
const handleDisconnected = (reason?: DisconnectReason) => {
94+
onDisconnected?.(reason);
95+
};
96+
const handleConnected = () => {
97+
onConnected?.();
98+
};
99+
92100
room
93101
.on(RoomEvent.SignalConnected, onSignalConnected)
94102
.on(RoomEvent.MediaDevicesError, handleMediaDeviceError)
95-
.on(RoomEvent.EncryptionError, handleEncryptionError);
103+
.on(RoomEvent.EncryptionError, handleEncryptionError)
104+
.on(RoomEvent.Disconnected, handleDisconnected)
105+
.on(RoomEvent.Connected, handleConnected);
96106

97107
return () => {
98108
room
99109
.off(RoomEvent.SignalConnected, onSignalConnected)
100110
.off(RoomEvent.MediaDevicesError, handleMediaDeviceError)
101-
.off(RoomEvent.EncryptionError, handleEncryptionError);
111+
.off(RoomEvent.EncryptionError, handleEncryptionError)
112+
.off(RoomEvent.Disconnected, handleDisconnected)
113+
.off(RoomEvent.Connected, handleConnected);
102114
};
103-
}, [room, audio, video, screen, onError, onEncryptionError, onMediaDeviceFailure]);
115+
}, [
116+
room,
117+
audio,
118+
video,
119+
screen,
120+
onError,
121+
onEncryptionError,
122+
onMediaDeviceFailure,
123+
onConnected,
124+
onDisconnected,
125+
]);
104126

105127
React.useEffect(() => {
106128
if (!room) return;
@@ -151,27 +173,6 @@ export function useLiveKitRoom<T extends HTMLElement>(
151173
simulateParticipants,
152174
]);
153175

154-
React.useEffect(() => {
155-
if (!room) return;
156-
const connectionStateChangeListener = (state: ConnectionState) => {
157-
switch (state) {
158-
case ConnectionState.Disconnected:
159-
if (onDisconnected) onDisconnected();
160-
break;
161-
case ConnectionState.Connected:
162-
if (onConnected) onConnected();
163-
break;
164-
165-
default:
166-
break;
167-
}
168-
};
169-
room.on(RoomEvent.ConnectionStateChanged, connectionStateChangeListener);
170-
return () => {
171-
room.off(RoomEvent.ConnectionStateChanged, connectionStateChangeListener);
172-
};
173-
}, [token, onConnected, onDisconnected, room]);
174-
175176
React.useEffect(() => {
176177
if (!room) return;
177178
return () => {

0 commit comments

Comments
 (0)