11import type { ToggleSource } from '@livekit/components-core' ;
22import { setupMediaToggle , setupManualToggle , log } from '@livekit/components-core' ;
33import * as React from 'react' ;
4+ import { type Room } from 'livekit-client' ;
45import type { TrackToggleProps } from '../components' ;
56import { useMaybeRoomContext } from '../context' ;
67import { mergeProps } from '../mergeProps' ;
78import { useObservableState } from './internal' ;
89
910/** @public */
1011export interface UseTrackToggleProps < T extends ToggleSource >
11- extends Omit < TrackToggleProps < T > , 'showIcon' > { }
12+ extends Omit < TrackToggleProps < T > , 'showIcon' > {
13+ room ?: Room ;
14+ }
1215
1316/**
1417 * The `useTrackToggle` hook is used to implement the `TrackToggle` component and returns state
@@ -28,19 +31,21 @@ export function useTrackToggle<T extends ToggleSource>({
2831 captureOptions,
2932 publishOptions,
3033 onDeviceError,
34+ room,
3135 ...rest
3236} : UseTrackToggleProps < T > ) {
33- const room = useMaybeRoomContext ( ) ;
34- const track = room ?. localParticipant ?. getTrackPublication ( source ) ;
37+ const roomFromContext = useMaybeRoomContext ( ) ;
38+ const roomFallback = React . useMemo ( ( ) => room ?? roomFromContext , [ room , roomFromContext ] ) ;
39+ const track = roomFallback ?. localParticipant ?. getTrackPublication ( source ) ;
3540 /** `true` if a user interaction such as a click on the TrackToggle button has occurred. */
3641 const userInteractionRef = React . useRef ( false ) ;
3742
3843 const { toggle, className, pendingObserver, enabledObserver } = React . useMemo (
3944 ( ) =>
40- room
41- ? setupMediaToggle < T > ( source , room , captureOptions , publishOptions , onDeviceError )
45+ roomFallback
46+ ? setupMediaToggle < T > ( source , roomFallback , captureOptions , publishOptions , onDeviceError )
4247 : setupManualToggle ( ) ,
43- [ room , source , JSON . stringify ( captureOptions ) , publishOptions ] ,
48+ [ roomFallback , source , JSON . stringify ( captureOptions ) , publishOptions ] ,
4449 ) ;
4550
4651 const pending = useObservableState ( pendingObserver , false ) ;
0 commit comments