@stream-io/video-react-sdk 1.32.3 → 1.33.0
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 +20 -0
- package/dist/css/embedded.css +3630 -0
- package/dist/css/embedded.css.map +1 -0
- package/dist/css/styles.css +13 -2
- package/dist/css/styles.css.map +1 -1
- package/dist/embedded-BackgroundFilters-RdXfNf6_.es.js +353 -0
- package/dist/embedded-BackgroundFilters-RdXfNf6_.es.js.map +1 -0
- package/dist/embedded-BackgroundFilters-Zu84SkRR.cjs.js +355 -0
- package/dist/embedded-BackgroundFilters-Zu84SkRR.cjs.js.map +1 -0
- package/dist/embedded-CallStatsLatencyChart-Bj5OSYzg.es.js +57 -0
- package/dist/embedded-CallStatsLatencyChart-Bj5OSYzg.es.js.map +1 -0
- package/dist/embedded-CallStatsLatencyChart-CpL1M_s0.cjs.js +59 -0
- package/dist/embedded-CallStatsLatencyChart-CpL1M_s0.cjs.js.map +1 -0
- package/dist/embedded.cjs.js +3410 -0
- package/dist/embedded.cjs.js.map +1 -0
- package/dist/embedded.d.ts +1 -0
- package/dist/embedded.es.js +3407 -0
- package/dist/embedded.es.js.map +1 -0
- package/dist/index.cjs.js +67 -202
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +69 -204
- package/dist/index.es.js.map +1 -1
- package/dist/src/embedded/EmbeddedClientProvider.d.ts +21 -0
- package/dist/src/embedded/call/CallControls.d.ts +9 -0
- package/dist/src/embedded/call/CallHeader.d.ts +4 -0
- package/dist/src/embedded/call/CallLayout.d.ts +4 -0
- package/dist/src/embedded/call/CallStateRouter.d.ts +4 -0
- package/dist/src/embedded/call/EmbeddedCall.d.ts +6 -0
- package/dist/src/embedded/call/index.d.ts +1 -0
- package/dist/src/embedded/context/ConfigurationContext.d.ts +11 -0
- package/dist/src/embedded/context/index.d.ts +1 -0
- package/dist/src/embedded/hooks/index.d.ts +8 -0
- package/dist/src/embedded/hooks/useCallDuration.d.ts +7 -0
- package/dist/src/embedded/hooks/useEmbeddedClient.d.ts +22 -0
- package/dist/src/embedded/hooks/useInitializeCall.d.ts +11 -0
- package/dist/src/embedded/hooks/useInitializeVideoClient.d.ts +16 -0
- package/dist/src/embedded/hooks/useIsLivestreamPaused.d.ts +8 -0
- package/dist/src/embedded/hooks/useLayout.d.ts +9 -0
- package/dist/src/embedded/hooks/useNoiseCancellationLoader.d.ts +12 -0
- package/dist/src/embedded/hooks/useWakeLock.d.ts +5 -0
- package/dist/src/embedded/index.d.ts +3 -0
- package/dist/src/embedded/livestream/EmbeddedLivestream.d.ts +5 -0
- package/dist/src/embedded/livestream/LivestreamUI.d.ts +1 -0
- package/dist/src/embedded/livestream/host/HostLayout.d.ts +7 -0
- package/dist/src/embedded/livestream/host/HostStateRouter.d.ts +1 -0
- package/dist/src/embedded/livestream/index.d.ts +1 -0
- package/dist/src/embedded/livestream/viewer/ViewerLayout.d.ts +1 -0
- package/dist/src/embedded/livestream/viewer/ViewerLobby.d.ts +4 -0
- package/dist/src/embedded/livestream/viewer/ViewerStateRouter.d.ts +1 -0
- package/dist/src/embedded/shared/BlurToggleButton/BlurToggleButton.d.ts +2 -0
- package/dist/src/embedded/shared/CallFeedback/CallEndedScreen.d.ts +6 -0
- package/dist/src/embedded/shared/CallFeedback/CallFeedback.d.ts +4 -0
- package/dist/src/embedded/shared/CallFeedback/RatingScreen.d.ts +5 -0
- package/dist/src/embedded/shared/CallFeedback/StarRating.d.ts +6 -0
- package/dist/src/embedded/shared/CallFeedback/ThankYouScreen.d.ts +1 -0
- package/dist/src/embedded/shared/ConnectionNotification/ConnectionNotification.d.ts +1 -0
- package/dist/src/embedded/shared/EmbeddedParticipantViewUI/EmbeddedParticipantViewUI.d.ts +1 -0
- package/dist/src/embedded/shared/JoinError/JoinError.d.ts +5 -0
- package/dist/src/embedded/shared/Lobby/DeviceControls.d.ts +5 -0
- package/dist/src/embedded/shared/Lobby/DisabledDeviceButton.d.ts +6 -0
- package/dist/src/embedded/shared/Lobby/Lobby.d.ts +10 -0
- package/dist/src/embedded/shared/Lobby/ToggleCameraButton.d.ts +1 -0
- package/dist/src/embedded/shared/Lobby/ToggleMicButton.d.ts +1 -0
- package/dist/src/embedded/shared/Lobby/VideoPreviewFallbacks.d.ts +2 -0
- package/dist/src/embedded/shared/ViewersCount/ViewersCount.d.ts +5 -0
- package/dist/src/embedded/shared/index.d.ts +7 -0
- package/dist/src/embedded/types.d.ts +65 -0
- package/dist/src/hooks/usePersistedDevicePreferences.d.ts +3 -12
- package/dist/src/translations/index.d.ts +42 -1
- package/embedded.ts +1 -0
- package/package.json +18 -4
- package/src/core/components/CallLayout/LivestreamLayout.tsx +53 -41
- package/src/embedded/EmbeddedClientProvider.tsx +125 -0
- package/src/embedded/call/CallControls.tsx +124 -0
- package/src/embedded/call/CallHeader.tsx +30 -0
- package/src/embedded/call/CallLayout.tsx +66 -0
- package/src/embedded/call/CallStateRouter.tsx +56 -0
- package/src/embedded/call/EmbeddedCall.tsx +14 -0
- package/src/embedded/call/index.ts +1 -0
- package/src/embedded/context/ConfigurationContext.tsx +36 -0
- package/src/embedded/context/index.ts +1 -0
- package/src/embedded/hooks/index.ts +8 -0
- package/src/embedded/hooks/useCallDuration.ts +40 -0
- package/src/embedded/hooks/useEmbeddedClient.ts +64 -0
- package/src/embedded/hooks/useInitializeCall.ts +51 -0
- package/src/embedded/hooks/useInitializeVideoClient.ts +118 -0
- package/src/embedded/hooks/useIsLivestreamPaused.ts +44 -0
- package/src/embedded/hooks/useLayout.ts +100 -0
- package/src/embedded/hooks/useNoiseCancellationLoader.ts +62 -0
- package/src/embedded/hooks/useWakeLock.ts +33 -0
- package/src/embedded/index.ts +12 -0
- package/src/embedded/livestream/EmbeddedLivestream.tsx +16 -0
- package/src/embedded/livestream/LivestreamUI.tsx +17 -0
- package/src/embedded/livestream/host/HostLayout.tsx +210 -0
- package/src/embedded/livestream/host/HostStateRouter.tsx +100 -0
- package/src/embedded/livestream/index.ts +1 -0
- package/src/embedded/livestream/viewer/ViewerLayout.tsx +160 -0
- package/src/embedded/livestream/viewer/ViewerLobby.tsx +135 -0
- package/src/embedded/livestream/viewer/ViewerStateRouter.tsx +82 -0
- package/src/embedded/shared/BlurToggleButton/BlurToggleButton.tsx +75 -0
- package/src/embedded/shared/CallFeedback/CallEndedScreen.tsx +55 -0
- package/src/embedded/shared/CallFeedback/CallFeedback.tsx +51 -0
- package/src/embedded/shared/CallFeedback/RatingScreen.tsx +47 -0
- package/src/embedded/shared/CallFeedback/StarRating.tsx +46 -0
- package/src/embedded/shared/CallFeedback/ThankYouScreen.tsx +19 -0
- package/src/embedded/shared/ConnectionNotification/ConnectionNotification.tsx +59 -0
- package/src/embedded/shared/EmbeddedParticipantViewUI/EmbeddedParticipantViewUI.tsx +32 -0
- package/src/embedded/shared/JoinError/JoinError.tsx +27 -0
- package/src/embedded/shared/Lobby/DeviceControls.tsx +54 -0
- package/src/embedded/shared/Lobby/DisabledDeviceButton.tsx +21 -0
- package/src/embedded/shared/Lobby/Lobby.tsx +59 -0
- package/src/embedded/shared/Lobby/ToggleCameraButton.tsx +44 -0
- package/src/embedded/shared/Lobby/ToggleMicButton.tsx +48 -0
- package/src/embedded/shared/Lobby/VideoPreviewFallbacks.tsx +55 -0
- package/src/embedded/shared/ViewersCount/ViewersCount.tsx +18 -0
- package/src/embedded/shared/index.ts +7 -0
- package/src/embedded/types.ts +80 -0
- package/src/hooks/usePersistedDevicePreferences.ts +8 -307
- package/src/translations/en.json +44 -2
|
@@ -1,314 +1,15 @@
|
|
|
1
|
-
import { useEffect
|
|
2
|
-
import { Call, CallingState, InputDeviceStatus } from '@stream-io/video-client';
|
|
3
|
-
import { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';
|
|
4
|
-
|
|
5
|
-
export type LocalDevicePreference = {
|
|
6
|
-
selectedDeviceId: string;
|
|
7
|
-
selectedDeviceLabel: string;
|
|
8
|
-
muted?: boolean;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
export type LocalDevicePreferences = {
|
|
12
|
-
// Array is preference history with latest preferences first.
|
|
13
|
-
// Single preference still acceptable for backwards compatibility.
|
|
14
|
-
[type in DeviceKey]?: LocalDevicePreference | LocalDevicePreference[];
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
type DeviceKey = 'microphone' | 'camera' | 'speaker';
|
|
18
|
-
|
|
19
|
-
type DeviceState<K extends DeviceKey> = {
|
|
20
|
-
[ManagerKey in K]: DeviceManagerLike;
|
|
21
|
-
} & {
|
|
22
|
-
isMute?: boolean;
|
|
23
|
-
devices: MediaDeviceInfo[];
|
|
24
|
-
selectedDevice: string | undefined;
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
interface DeviceManagerLike {
|
|
28
|
-
state: { selectedDevice: string | undefined; status?: InputDeviceStatus };
|
|
29
|
-
select: (deviceId: string) => Promise<void> | void;
|
|
30
|
-
enable?: () => Promise<void>;
|
|
31
|
-
disable?: () => Promise<void>;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const defaultDevice = 'default';
|
|
1
|
+
import { useEffect } from 'react';
|
|
35
2
|
|
|
36
3
|
/**
|
|
37
|
-
* This hook
|
|
4
|
+
* This hook is a no-op. Device preference persistence is now handled
|
|
5
|
+
* by the low-level client SDK.
|
|
38
6
|
*
|
|
39
|
-
* @
|
|
7
|
+
* @deprecated use the devicePreferences API of the StreamVideoClient.
|
|
40
8
|
*/
|
|
41
|
-
export const usePersistedDevicePreferences = (
|
|
42
|
-
key: string = '@stream-io/device-preferences',
|
|
43
|
-
): void => {
|
|
44
|
-
const {
|
|
45
|
-
useCallSettings,
|
|
46
|
-
useCallCallingState,
|
|
47
|
-
useMicrophoneState,
|
|
48
|
-
useCameraState,
|
|
49
|
-
useSpeakerState,
|
|
50
|
-
} = useCallStateHooks();
|
|
51
|
-
const settings = useCallSettings();
|
|
52
|
-
const callingState = useCallCallingState();
|
|
53
|
-
|
|
54
|
-
const microphoneState: DeviceState<'microphone'> = useMicrophoneState();
|
|
55
|
-
const cameraState: DeviceState<'camera'> = useCameraState();
|
|
56
|
-
const speakerState: DeviceState<'speaker'> = useSpeakerState();
|
|
57
|
-
|
|
58
|
-
const [applyingState, setApplyingState] = useState<
|
|
59
|
-
'idle' | 'applying' | 'applied'
|
|
60
|
-
>('idle');
|
|
61
|
-
|
|
62
|
-
const call = useCall();
|
|
63
|
-
|
|
64
|
-
// Set deferServerDefaults flag synchronously during render.
|
|
65
|
-
// Please ensure the flag is set BEFORE any call.get() or call.getOrCreate()
|
|
66
|
-
// is called, preventing server defaults from overriding user preferences.
|
|
67
|
-
const deferredCallRef = useRef<Call | null>(null);
|
|
68
|
-
if (call && deferredCallRef.current !== call) {
|
|
69
|
-
call.camera.deferServerDefaults = true;
|
|
70
|
-
call.microphone.deferServerDefaults = true;
|
|
71
|
-
deferredCallRef.current = call;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// Cleanup: reset the flag when the component unmounts or call changes.
|
|
75
|
-
// This allows server defaults to apply if the hook is no longer used.
|
|
9
|
+
export const usePersistedDevicePreferences = (key: string = ''): void => {
|
|
76
10
|
useEffect(() => {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if (currentCall) {
|
|
80
|
-
currentCall.camera.deferServerDefaults = false;
|
|
81
|
-
currentCall.microphone.deferServerDefaults = false;
|
|
82
|
-
deferredCallRef.current = null;
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
}, [call]);
|
|
86
|
-
|
|
87
|
-
// when the camera is disabled on call type level, we should discard
|
|
88
|
-
// any stored camera preferences.
|
|
89
|
-
const cameraDevices = settings?.video?.enabled ? cameraState.devices : false;
|
|
90
|
-
useEffect(
|
|
91
|
-
function apply() {
|
|
92
|
-
if (
|
|
93
|
-
callingState === CallingState.LEFT ||
|
|
94
|
-
microphoneState.devices.length === 0 ||
|
|
95
|
-
(Array.isArray(cameraDevices) && cameraDevices.length === 0) ||
|
|
96
|
-
speakerState.devices.length === 0 ||
|
|
97
|
-
!settings ||
|
|
98
|
-
applyingState !== 'idle'
|
|
99
|
-
) {
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
setApplyingState('applying');
|
|
104
|
-
|
|
105
|
-
(async () => {
|
|
106
|
-
const { audio, video } = settings;
|
|
107
|
-
for (const [deviceKey, state, defaultMuted, enabledInCallType] of [
|
|
108
|
-
['microphone', microphoneState, !audio.mic_default_on, true],
|
|
109
|
-
['camera', cameraState, !video.camera_default_on, video.enabled],
|
|
110
|
-
['speaker', speakerState, false, true],
|
|
111
|
-
] as const) {
|
|
112
|
-
const preferences = parseLocalDevicePreferences(key);
|
|
113
|
-
const preference = preferences[deviceKey];
|
|
114
|
-
const manager = (
|
|
115
|
-
state as DeviceState<'camera' | 'microphone' | 'speaker'>
|
|
116
|
-
)[deviceKey];
|
|
117
|
-
|
|
118
|
-
const applyPromise = preference
|
|
119
|
-
? applyLocalDevicePreference(
|
|
120
|
-
manager,
|
|
121
|
-
[preference].flat(),
|
|
122
|
-
deviceKey === 'camera' ? cameraDevices || [] : state.devices,
|
|
123
|
-
enabledInCallType,
|
|
124
|
-
)
|
|
125
|
-
: applyMutedState(manager, defaultMuted, enabledInCallType);
|
|
126
|
-
|
|
127
|
-
await applyPromise.catch((err) => {
|
|
128
|
-
console.warn(
|
|
129
|
-
`Failed to apply ${deviceKey} device preferences`,
|
|
130
|
-
err,
|
|
131
|
-
);
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
})().finally(() =>
|
|
135
|
-
setApplyingState((state) => (state === 'applying' ? 'applied' : state)),
|
|
136
|
-
);
|
|
137
|
-
},
|
|
138
|
-
[
|
|
139
|
-
applyingState,
|
|
140
|
-
callingState,
|
|
141
|
-
cameraState,
|
|
142
|
-
cameraDevices,
|
|
143
|
-
key,
|
|
144
|
-
microphoneState,
|
|
145
|
-
microphoneState.devices,
|
|
146
|
-
settings,
|
|
147
|
-
speakerState,
|
|
148
|
-
speakerState.devices,
|
|
149
|
-
],
|
|
150
|
-
);
|
|
151
|
-
|
|
152
|
-
useEffect(
|
|
153
|
-
function persist() {
|
|
154
|
-
if (callingState === CallingState.LEFT || applyingState !== 'applied') {
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
for (const [deviceKey, devices, selectedDevice, isMute] of [
|
|
159
|
-
[
|
|
160
|
-
'camera',
|
|
161
|
-
cameraDevices || [],
|
|
162
|
-
cameraState.selectedDevice,
|
|
163
|
-
cameraState.isMute,
|
|
164
|
-
],
|
|
165
|
-
[
|
|
166
|
-
'microphone',
|
|
167
|
-
microphoneState.devices,
|
|
168
|
-
microphoneState.selectedDevice,
|
|
169
|
-
microphoneState.isMute,
|
|
170
|
-
],
|
|
171
|
-
[
|
|
172
|
-
'speaker',
|
|
173
|
-
speakerState.devices,
|
|
174
|
-
speakerState.selectedDevice,
|
|
175
|
-
speakerState.isMute,
|
|
176
|
-
],
|
|
177
|
-
] as const) {
|
|
178
|
-
try {
|
|
179
|
-
patchLocalDevicePreference(key, deviceKey, {
|
|
180
|
-
devices,
|
|
181
|
-
selectedDevice,
|
|
182
|
-
isMute,
|
|
183
|
-
});
|
|
184
|
-
} catch (err) {
|
|
185
|
-
console.warn(`Failed to save ${deviceKey} device preferences`, err);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
},
|
|
189
|
-
[
|
|
190
|
-
applyingState,
|
|
191
|
-
callingState,
|
|
192
|
-
cameraDevices,
|
|
193
|
-
cameraState.isMute,
|
|
194
|
-
cameraState.selectedDevice,
|
|
195
|
-
key,
|
|
196
|
-
microphoneState.devices,
|
|
197
|
-
microphoneState.isMute,
|
|
198
|
-
microphoneState.selectedDevice,
|
|
199
|
-
speakerState.devices,
|
|
200
|
-
speakerState.isMute,
|
|
201
|
-
speakerState.selectedDevice,
|
|
202
|
-
],
|
|
203
|
-
);
|
|
204
|
-
};
|
|
205
|
-
|
|
206
|
-
const parseLocalDevicePreferences = (key: string): LocalDevicePreferences => {
|
|
207
|
-
const preferencesStr = window.localStorage.getItem(key);
|
|
208
|
-
let preferences: LocalDevicePreferences = {};
|
|
209
|
-
|
|
210
|
-
if (preferencesStr) {
|
|
211
|
-
try {
|
|
212
|
-
preferences = JSON.parse(preferencesStr);
|
|
213
|
-
|
|
214
|
-
if (Object.hasOwn(preferences, 'mic')) {
|
|
215
|
-
// for backwards compatibility
|
|
216
|
-
preferences.microphone = (
|
|
217
|
-
preferences as { mic: LocalDevicePreference }
|
|
218
|
-
).mic;
|
|
219
|
-
}
|
|
220
|
-
} catch {
|
|
221
|
-
/* assume preferences are empty */
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
return preferences;
|
|
226
|
-
};
|
|
227
|
-
|
|
228
|
-
const patchLocalDevicePreference = (
|
|
229
|
-
key: string,
|
|
230
|
-
deviceKey: DeviceKey,
|
|
231
|
-
state: Pick<DeviceState<never>, 'devices' | 'selectedDevice' | 'isMute'>,
|
|
232
|
-
): void => {
|
|
233
|
-
const preferences = parseLocalDevicePreferences(key);
|
|
234
|
-
const nextPreference = getSelectedDevicePreference(
|
|
235
|
-
state.devices,
|
|
236
|
-
state.selectedDevice,
|
|
237
|
-
);
|
|
238
|
-
const preferenceHistory = [preferences[deviceKey] ?? []]
|
|
239
|
-
.flat()
|
|
240
|
-
.filter(
|
|
241
|
-
(p) =>
|
|
242
|
-
p.selectedDeviceId !== nextPreference.selectedDeviceId &&
|
|
243
|
-
(p.selectedDeviceLabel === '' ||
|
|
244
|
-
p.selectedDeviceLabel !== nextPreference.selectedDeviceLabel),
|
|
11
|
+
console.warn(
|
|
12
|
+
`usePersistedDevicePreferences is deprecated. Please use the devicePreferences API of the StreamVideoClient instead.`,
|
|
245
13
|
);
|
|
246
|
-
|
|
247
|
-
window.localStorage.setItem(
|
|
248
|
-
key,
|
|
249
|
-
JSON.stringify({
|
|
250
|
-
...preferences,
|
|
251
|
-
mic: undefined, // for backwards compatibility
|
|
252
|
-
[deviceKey]: [
|
|
253
|
-
{
|
|
254
|
-
...nextPreference,
|
|
255
|
-
muted: state.isMute,
|
|
256
|
-
} satisfies LocalDevicePreference,
|
|
257
|
-
...preferenceHistory,
|
|
258
|
-
].slice(0, 3),
|
|
259
|
-
}),
|
|
260
|
-
);
|
|
261
|
-
};
|
|
262
|
-
|
|
263
|
-
const applyLocalDevicePreference = async (
|
|
264
|
-
manager: DeviceManagerLike,
|
|
265
|
-
preference: LocalDevicePreference[],
|
|
266
|
-
devices: MediaDeviceInfo[],
|
|
267
|
-
enabledInCallType: boolean,
|
|
268
|
-
): Promise<void> => {
|
|
269
|
-
let muted: boolean | undefined;
|
|
270
|
-
|
|
271
|
-
for (const p of preference) {
|
|
272
|
-
muted ??= p.muted;
|
|
273
|
-
|
|
274
|
-
if (p.selectedDeviceId === defaultDevice) {
|
|
275
|
-
break;
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
const device =
|
|
279
|
-
devices.find((d) => d.deviceId === p.selectedDeviceId) ??
|
|
280
|
-
devices.find((d) => d.label === p.selectedDeviceLabel);
|
|
281
|
-
|
|
282
|
-
if (device) {
|
|
283
|
-
if (!manager.state.selectedDevice) {
|
|
284
|
-
await manager.select(device.deviceId);
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
muted = p.muted;
|
|
288
|
-
break;
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
if (typeof muted === 'boolean') {
|
|
293
|
-
await applyMutedState(manager, muted, enabledInCallType);
|
|
294
|
-
}
|
|
14
|
+
}, [key]);
|
|
295
15
|
};
|
|
296
|
-
|
|
297
|
-
const applyMutedState = async (
|
|
298
|
-
manager: DeviceManagerLike,
|
|
299
|
-
muted: boolean,
|
|
300
|
-
enabledInCallType: boolean,
|
|
301
|
-
) => {
|
|
302
|
-
if (enabledInCallType && !manager.state.status) {
|
|
303
|
-
await manager[muted ? 'disable' : 'enable']?.();
|
|
304
|
-
}
|
|
305
|
-
};
|
|
306
|
-
|
|
307
|
-
const getSelectedDevicePreference = (
|
|
308
|
-
devices: MediaDeviceInfo[],
|
|
309
|
-
selectedDevice: string | undefined,
|
|
310
|
-
): Pick<LocalDevicePreference, 'selectedDeviceId' | 'selectedDeviceLabel'> => ({
|
|
311
|
-
selectedDeviceId: selectedDevice || defaultDevice,
|
|
312
|
-
selectedDeviceLabel:
|
|
313
|
-
devices?.find((d) => d.deviceId === selectedDevice)?.label ?? '',
|
|
314
|
-
});
|
package/src/translations/en.json
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
"Live": "Live",
|
|
17
17
|
"Livestream starts soon": "Livestream starts soon",
|
|
18
|
-
"Livestream starts at {{
|
|
18
|
+
"Livestream starts at {{ time }}": "Livestream starts at {{ time }}",
|
|
19
19
|
"{{ count }} participants joined early_one": "{{ count }} participant joined early",
|
|
20
20
|
"{{ count }} participants joined early_other": "{{ count }} participants joined early",
|
|
21
21
|
|
|
@@ -101,5 +101,47 @@
|
|
|
101
101
|
"{{ userName }} is requesting to speak": "{{ userName }} is requesting to speak",
|
|
102
102
|
"{{ userName }} is requesting to share their camera": "{{ userName }} is requesting to share their camera",
|
|
103
103
|
"{{ userName }} is requesting to present their screen": "{{ userName }} is requesting to present their screen",
|
|
104
|
-
"{{ userName }} is requesting permission: {{ permission }}": "{{ userName }} is requesting permission: {{ permission }}"
|
|
104
|
+
"{{ userName }} is requesting permission: {{ permission }}": "{{ userName }} is requesting permission: {{ permission }}",
|
|
105
|
+
|
|
106
|
+
"Applying...": "Applying...",
|
|
107
|
+
"Disable blur": "Disable blur",
|
|
108
|
+
"Blur background": "Blur background",
|
|
109
|
+
"Migrating...": "Migrating...",
|
|
110
|
+
"Reconnecting...": "Reconnecting...",
|
|
111
|
+
"You are offline. Check your internet connection.": "You are offline. Check your internet connection.",
|
|
112
|
+
"Failed to restore connection. Please try again.": "Failed to restore connection. Please try again.",
|
|
113
|
+
"Failed to join. Please try again.": "Failed to join. Please try again.",
|
|
114
|
+
"Set up your call before joining": "Set up your call before joining",
|
|
115
|
+
"Please grant your browser permission to access your camera and microphone.": "Please grant your browser permission to access your camera and microphone.",
|
|
116
|
+
"Start call": "Start call",
|
|
117
|
+
"Speaker": "Speaker",
|
|
118
|
+
"Microphone": "Microphone",
|
|
119
|
+
"Backstage": "Backstage",
|
|
120
|
+
"Go Live": "Go Live",
|
|
121
|
+
"Stop Live": "End Live",
|
|
122
|
+
"Enter Backstage": "Enter Backstage",
|
|
123
|
+
"Prepare your livestream": "Prepare your livestream",
|
|
124
|
+
"Ready to go live": "Ready to go live",
|
|
125
|
+
"Stream is ready!": "Stream is ready!",
|
|
126
|
+
"Waiting for the livestream to start": "Waiting for the livestream to start",
|
|
127
|
+
"{{ count }} waiting": "{{ count }} waiting",
|
|
128
|
+
"Join Stream": "Join Stream",
|
|
129
|
+
"Join automatically when stream starts": "Join automatically when stream starts",
|
|
130
|
+
"Display name": "Display name",
|
|
131
|
+
"Permission needed": "Permission needed",
|
|
132
|
+
"Call ended": "Call ended",
|
|
133
|
+
"Rejoin call": "Rejoin call",
|
|
134
|
+
"Left by mistake?": "Left by mistake?",
|
|
135
|
+
"Help us improve": "Help us improve",
|
|
136
|
+
"Leave feedback": "Leave feedback",
|
|
137
|
+
"Failed to rejoin. Please try again.": "Failed to rejoin. Please try again.",
|
|
138
|
+
"Share your feedback": "Share your feedback",
|
|
139
|
+
"Tell us about your experience...": "Tell us about your experience...",
|
|
140
|
+
"Submit feedback": "Submit feedback",
|
|
141
|
+
"Feedback message": "Feedback message",
|
|
142
|
+
"How was your call quality?": "How was your call quality?",
|
|
143
|
+
"Rate {{ count }} star_one": "Rate {{ count }} star",
|
|
144
|
+
"Rate {{ count }} star_other": "Rate {{ count }} stars",
|
|
145
|
+
"Thank you!": "Thank you!",
|
|
146
|
+
"Your feedback helps improve call quality.": "Your feedback helps improve call quality."
|
|
105
147
|
}
|