Skip to content

Commit ca070d8

Browse files
authored
Change useAgent to return undefined for nullable TrackReference values (#1224)
1 parent 5ac9460 commit ca070d8

File tree

3 files changed

+27
-24
lines changed

3 files changed

+27
-24
lines changed

.changeset/poor-coats-relax.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@livekit/components-react': patch
3+
---
4+
5+
Change useAgent to return undefined for nullable TrackReference values

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ import { WidgetState } from '@livekit/components-core';
7575

7676
// @public (undocumented)
7777
export type AgentCallbacks = {
78-
[AgentEvent.CameraChanged]: (newTrack: TrackReference | null) => void;
79-
[AgentEvent.MicrophoneChanged]: (newTrack: TrackReference | null) => void;
78+
[AgentEvent.CameraChanged]: (newTrack: TrackReference | undefined) => void;
79+
[AgentEvent.MicrophoneChanged]: (newTrack: TrackReference | undefined) => void;
8080
[AgentEvent.StateChanged]: (newAgentState: AgentState) => void;
8181
};
8282

packages/react/src/hooks/useAgent.ts

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ export enum AgentEvent {
5151

5252
/** @public */
5353
export type AgentCallbacks = {
54-
[AgentEvent.CameraChanged]: (newTrack: TrackReference | null) => void;
55-
[AgentEvent.MicrophoneChanged]: (newTrack: TrackReference | null) => void;
54+
[AgentEvent.CameraChanged]: (newTrack: TrackReference | undefined) => void;
55+
[AgentEvent.MicrophoneChanged]: (newTrack: TrackReference | undefined) => void;
5656
[AgentEvent.StateChanged]: (newAgentState: AgentState) => void;
5757
};
5858

@@ -79,8 +79,8 @@ type AgentStateAvailable = AgentStateCommon & {
7979
* connected yet? */
8080
isBufferingSpeech: false;
8181

82-
cameraTrack: TrackReference | null;
83-
microphoneTrack: TrackReference | null;
82+
cameraTrack?: TrackReference;
83+
microphoneTrack?: TrackReference;
8484
};
8585

8686
type AgentStateAvailableListening = AgentStateCommon & {
@@ -94,8 +94,8 @@ type AgentStateAvailableListening = AgentStateCommon & {
9494
* connected yet? */
9595
isBufferingSpeech: boolean;
9696

97-
cameraTrack: TrackReference | null;
98-
microphoneTrack: TrackReference | null;
97+
cameraTrack?: TrackReference;
98+
microphoneTrack?: TrackReference;
9999
};
100100

101101
type AgentStateUnAvailable = AgentStateCommon & {
@@ -109,8 +109,8 @@ type AgentStateUnAvailable = AgentStateCommon & {
109109
* connected yet? */
110110
isBufferingSpeech: false;
111111

112-
cameraTrack: TrackReference | null;
113-
microphoneTrack: TrackReference | null;
112+
cameraTrack?: TrackReference;
113+
microphoneTrack?: TrackReference;
114114
};
115115

116116
type AgentStateConnecting = AgentStateCommon & {
@@ -124,8 +124,8 @@ type AgentStateConnecting = AgentStateCommon & {
124124
* connected yet? */
125125
isBufferingSpeech: false;
126126

127-
cameraTrack: null;
128-
microphoneTrack: null;
127+
cameraTrack: undefined;
128+
microphoneTrack: undefined;
129129
};
130130

131131
type AgentStateFailed = AgentStateCommon & {
@@ -139,8 +139,8 @@ type AgentStateFailed = AgentStateCommon & {
139139
* connected yet? */
140140
isBufferingSpeech: false;
141141

142-
cameraTrack: null;
143-
microphoneTrack: null;
142+
cameraTrack: undefined;
143+
microphoneTrack: undefined;
144144
};
145145

146146
type AgentActions = {
@@ -325,8 +325,7 @@ export function useAgent(session?: SessionStub): UseAgentReturn {
325325
const videoTrack = React.useMemo(
326326
() =>
327327
agentTracks.find((t) => t.source === Track.Source.Camera) ??
328-
workerTracks.find((t) => t.source === Track.Source.Camera) ??
329-
null,
328+
workerTracks.find((t) => t.source === Track.Source.Camera),
330329
[agentTracks, workerTracks],
331330
);
332331
React.useEffect(() => {
@@ -336,8 +335,7 @@ export function useAgent(session?: SessionStub): UseAgentReturn {
336335
const audioTrack = React.useMemo(
337336
() =>
338337
agentTracks.find((t) => t.source === Track.Source.Microphone) ??
339-
workerTracks.find((t) => t.source === Track.Source.Microphone) ??
340-
null,
338+
workerTracks.find((t) => t.source === Track.Source.Microphone),
341339
[agentTracks, workerTracks],
342340
);
343341
React.useEffect(() => {
@@ -468,8 +466,8 @@ export function useAgent(session?: SessionStub): UseAgentReturn {
468466
failureReasons: null,
469467

470468
// Clear inner values if no longer connected
471-
cameraTrack: null,
472-
microphoneTrack: null,
469+
cameraTrack: undefined,
470+
microphoneTrack: undefined,
473471
};
474472

475473
case 'initializing':
@@ -523,8 +521,8 @@ export function useAgent(session?: SessionStub): UseAgentReturn {
523521
failureReasons,
524522

525523
// Clear inner values if no longer connected
526-
cameraTrack: null,
527-
microphoneTrack: null,
524+
cameraTrack: undefined,
525+
microphoneTrack: undefined,
528526
};
529527
}
530528
}, [
@@ -574,7 +572,7 @@ export function useAgent(session?: SessionStub): UseAgentReturn {
574572
const waitUntilCamera = React.useCallback(
575573
(signal?: AbortSignal) => {
576574
return new Promise<TrackReference>((resolve, reject) => {
577-
const stateChangedHandler = (camera: TrackReference | null) => {
575+
const stateChangedHandler = (camera: TrackReference | undefined) => {
578576
if (!camera) {
579577
return;
580578
}
@@ -601,7 +599,7 @@ export function useAgent(session?: SessionStub): UseAgentReturn {
601599
const waitUntilMicrophone = React.useCallback(
602600
(signal?: AbortSignal) => {
603601
return new Promise<TrackReference>((resolve, reject) => {
604-
const stateChangedHandler = (microphone: TrackReference | null) => {
602+
const stateChangedHandler = (microphone: TrackReference | undefined) => {
605603
if (!microphone) {
606604
return;
607605
}

0 commit comments

Comments
 (0)