@stream-io/video-react-sdk 1.2.17 → 1.2.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/index.cjs.js +12 -24
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +12 -24
- package/dist/index.es.js.map +1 -1
- package/package.json +1 -1
- package/src/hooks/usePersistedDevicePreferences.ts +15 -25
package/package.json
CHANGED
|
@@ -11,38 +11,32 @@ export type LocalDevicePreferences = {
|
|
|
11
11
|
[type in 'mic' | 'camera' | 'speaker']: LocalDevicePreference;
|
|
12
12
|
};
|
|
13
13
|
|
|
14
|
+
const defaultDevice = 'default';
|
|
15
|
+
|
|
14
16
|
/**
|
|
15
17
|
* This hook will persist the device settings to local storage.
|
|
16
18
|
*
|
|
17
19
|
* @param key the key to use for local storage.
|
|
18
20
|
*/
|
|
19
21
|
const usePersistDevicePreferences = (key: string) => {
|
|
20
|
-
const {
|
|
21
|
-
|
|
22
|
-
useCameraState,
|
|
23
|
-
useSpeakerState,
|
|
24
|
-
useCallSettings,
|
|
25
|
-
} = useCallStateHooks();
|
|
22
|
+
const { useMicrophoneState, useCameraState, useSpeakerState } =
|
|
23
|
+
useCallStateHooks();
|
|
26
24
|
const call = useCall();
|
|
27
25
|
const mic = useMicrophoneState();
|
|
28
26
|
const camera = useCameraState();
|
|
29
27
|
const speaker = useSpeakerState();
|
|
30
|
-
const settings = useCallSettings();
|
|
31
28
|
useEffect(() => {
|
|
32
|
-
if (!call
|
|
29
|
+
if (!call) return;
|
|
33
30
|
if (call.state.callingState === CallingState.LEFT) return;
|
|
34
31
|
try {
|
|
35
|
-
const hasPreferences = !!window.localStorage.getItem(key);
|
|
36
|
-
const { audio, video } = settings;
|
|
37
|
-
const defaultDevice = 'default';
|
|
38
32
|
const preferences: LocalDevicePreferences = {
|
|
39
33
|
mic: {
|
|
40
34
|
selectedDeviceId: mic.selectedDevice || defaultDevice,
|
|
41
|
-
muted:
|
|
35
|
+
muted: mic.isMute,
|
|
42
36
|
},
|
|
43
37
|
camera: {
|
|
44
38
|
selectedDeviceId: camera.selectedDevice || defaultDevice,
|
|
45
|
-
muted:
|
|
39
|
+
muted: camera.isMute,
|
|
46
40
|
},
|
|
47
41
|
speaker: {
|
|
48
42
|
selectedDeviceId: speaker.selectedDevice || defaultDevice,
|
|
@@ -60,7 +54,6 @@ const usePersistDevicePreferences = (key: string) => {
|
|
|
60
54
|
key,
|
|
61
55
|
mic.isMute,
|
|
62
56
|
mic.selectedDevice,
|
|
63
|
-
settings,
|
|
64
57
|
speaker.selectedDevice,
|
|
65
58
|
]);
|
|
66
59
|
};
|
|
@@ -72,15 +65,13 @@ const usePersistDevicePreferences = (key: string) => {
|
|
|
72
65
|
*/
|
|
73
66
|
const useApplyDevicePreferences = (key: string) => {
|
|
74
67
|
const call = useCall();
|
|
75
|
-
const { useCallSettings } = useCallStateHooks();
|
|
76
|
-
const settings = useCallSettings();
|
|
77
68
|
useEffect(() => {
|
|
78
|
-
if (!call
|
|
69
|
+
if (!call) return;
|
|
79
70
|
if (call.state.callingState === CallingState.LEFT) return;
|
|
80
71
|
|
|
81
72
|
const apply = async () => {
|
|
82
73
|
const initMic = async (setting: LocalDevicePreference) => {
|
|
83
|
-
await call.microphone.select(setting.selectedDeviceId);
|
|
74
|
+
await call.microphone.select(parseDeviceId(setting.selectedDeviceId));
|
|
84
75
|
if (setting.muted) {
|
|
85
76
|
await call.microphone.disable();
|
|
86
77
|
} else {
|
|
@@ -89,7 +80,7 @@ const useApplyDevicePreferences = (key: string) => {
|
|
|
89
80
|
};
|
|
90
81
|
|
|
91
82
|
const initCamera = async (setting: LocalDevicePreference) => {
|
|
92
|
-
await call.camera.select(setting.selectedDeviceId);
|
|
83
|
+
await call.camera.select(parseDeviceId(setting.selectedDeviceId));
|
|
93
84
|
if (setting.muted) {
|
|
94
85
|
await call.camera.disable();
|
|
95
86
|
} else {
|
|
@@ -98,7 +89,7 @@ const useApplyDevicePreferences = (key: string) => {
|
|
|
98
89
|
};
|
|
99
90
|
|
|
100
91
|
const initSpeaker = (setting: LocalDevicePreference) => {
|
|
101
|
-
call.speaker.select(setting.selectedDeviceId);
|
|
92
|
+
call.speaker.select(parseDeviceId(setting.selectedDeviceId) ?? '');
|
|
102
93
|
};
|
|
103
94
|
|
|
104
95
|
let preferences: LocalDevicePreferences | null = null;
|
|
@@ -113,17 +104,13 @@ const useApplyDevicePreferences = (key: string) => {
|
|
|
113
104
|
await initMic(preferences.mic);
|
|
114
105
|
await initCamera(preferences.camera);
|
|
115
106
|
initSpeaker(preferences.speaker);
|
|
116
|
-
} else {
|
|
117
|
-
const { audio, video } = settings;
|
|
118
|
-
if (audio.mic_default_on) await call.microphone.enable();
|
|
119
|
-
if (video.camera_default_on) await call.camera.enable();
|
|
120
107
|
}
|
|
121
108
|
};
|
|
122
109
|
|
|
123
110
|
apply().catch((err) => {
|
|
124
111
|
console.warn('Failed to apply device preferences', err);
|
|
125
112
|
});
|
|
126
|
-
}, [call, key
|
|
113
|
+
}, [call, key]);
|
|
127
114
|
};
|
|
128
115
|
|
|
129
116
|
/**
|
|
@@ -137,3 +124,6 @@ export const usePersistedDevicePreferences = (
|
|
|
137
124
|
useApplyDevicePreferences(key);
|
|
138
125
|
usePersistDevicePreferences(key);
|
|
139
126
|
};
|
|
127
|
+
|
|
128
|
+
const parseDeviceId = (deviceId: string) =>
|
|
129
|
+
deviceId !== defaultDevice ? deviceId : undefined;
|