Skip to content

Commit cb45f42

Browse files
authored
Fix local storage of user choices (#949)
1 parent 8318a5d commit cb45f42

File tree

5 files changed

+18
-8
lines changed

5 files changed

+18
-8
lines changed

.changeset/dry-cameras-invite.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@livekit/components-core": patch
3+
"@livekit/components-react": patch
4+
---
5+
6+
Fix local storage of user choices

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ export const log: loglevel.Logger;
282282
// @public (undocumented)
283283
export type MediaToggleType<T extends ToggleSource> = {
284284
pendingObserver: Observable<boolean>;
285-
toggle: (forceState?: boolean, captureOptions?: CaptureOptionsBySource<T>) => Promise<void>;
285+
toggle: (forceState?: boolean, captureOptions?: CaptureOptionsBySource<T>) => Promise<boolean | undefined>;
286286
className: string;
287287
enabledObserver: Observable<boolean>;
288288
};

packages/core/src/components/mediaToggle.ts

+9-5
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@ export type CaptureOptionsBySource<T extends ToggleSource> = T extends Track.Sou
2222

2323
export type MediaToggleType<T extends ToggleSource> = {
2424
pendingObserver: Observable<boolean>;
25-
toggle: (forceState?: boolean, captureOptions?: CaptureOptionsBySource<T>) => Promise<void>;
25+
toggle: (
26+
forceState?: boolean,
27+
captureOptions?: CaptureOptionsBySource<T>,
28+
) => Promise<boolean | undefined>;
2629
className: string;
2730
enabledObserver: Observable<boolean>;
2831
};
@@ -79,27 +82,28 @@ export function setupMediaToggle<T extends ToggleSource>(
7982
captureOptions as VideoCaptureOptions,
8083
publishOptions,
8184
);
82-
break;
85+
return localParticipant.isCameraEnabled;
8386
case Track.Source.Microphone:
8487
await localParticipant.setMicrophoneEnabled(
8588
forceState ?? !localParticipant.isMicrophoneEnabled,
8689
captureOptions as AudioCaptureOptions,
8790
publishOptions,
8891
);
89-
break;
92+
return localParticipant.isMicrophoneEnabled;
9093
case Track.Source.ScreenShare:
9194
await localParticipant.setScreenShareEnabled(
9295
forceState ?? !localParticipant.isScreenShareEnabled,
9396
captureOptions as ScreenShareCaptureOptions,
9497
publishOptions,
9598
);
96-
break;
99+
return localParticipant.isScreenShareEnabled;
97100
default:
98-
break;
101+
throw new TypeError('Tried to toggle unsupported source');
99102
}
100103
} catch (e) {
101104
if (onError && e instanceof Error) {
102105
onError?.(e);
106+
return undefined;
103107
} else {
104108
throw e;
105109
}

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -1159,7 +1159,7 @@ export type UseTracksOptions = {
11591159

11601160
// @public
11611161
export function useTrackToggle<T extends ToggleSource>({ source, onChange, initialState, captureOptions, publishOptions, onDeviceError, ...rest }: UseTrackToggleProps<T>): {
1162-
toggle: (forceState?: boolean | undefined, captureOptions?: CaptureOptionsBySource<T> | undefined) => Promise<void>;
1162+
toggle: ((forceState?: boolean | undefined) => Promise<void>) | ((forceState?: boolean | undefined, captureOptions?: CaptureOptionsBySource<T> | undefined) => Promise<boolean | undefined>);
11631163
enabled: boolean;
11641164
pending: boolean;
11651165
track: LocalTrackPublication | undefined;

packages/react/src/hooks/useTrackToggle.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ export function useTrackToggle<T extends ToggleSource>({
6565
const clickHandler: React.MouseEventHandler<HTMLButtonElement> = React.useCallback(
6666
(evt) => {
6767
userInteractionRef.current = true;
68-
toggle().finally(() => (userInteractionRef.current = false));
68+
toggle().catch(() => (userInteractionRef.current = false));
6969
rest.onClick?.(evt);
7070
},
7171
[rest, toggle],

0 commit comments

Comments
 (0)