@100mslive/roomkit-react 0.1.9 → 0.1.10
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/dist/{HLSView-VGJ2XUDT.js → HLSView-7WXNI2WP.js} +14 -10
- package/dist/HLSView-7WXNI2WP.js.map +7 -0
- package/dist/Modal/Dialog.d.ts +878 -9
- package/dist/Modal/DialogContent.d.ts +2 -2
- package/dist/Prebuilt/components/Leave/DesktopLeaveRoom.d.ts +4 -4
- package/dist/Prebuilt/components/Leave/EndSessionContent.d.ts +3 -3
- package/dist/Prebuilt/components/Leave/LeaveSessionContent.d.ts +3 -3
- package/dist/Prebuilt/components/Leave/MwebLeaveRoom.d.ts +4 -4
- package/dist/Prebuilt/components/VirtualBackground/VBCollection.d.ts +13 -0
- package/dist/Prebuilt/components/VirtualBackground/VBOption.d.ts +15 -0
- package/dist/Prebuilt/components/VirtualBackground/constants.d.ts +9 -0
- package/dist/Prebuilt/layouts/SidePane.d.ts +2 -2
- package/dist/{chunk-EDGWHFCM.js → chunk-N5HPVHTK.js} +6091 -4897
- package/dist/chunk-N5HPVHTK.js.map +7 -0
- package/dist/index.cjs.js +5217 -5060
- package/dist/index.cjs.js.map +4 -4
- package/dist/index.js +11 -13
- package/dist/meta.cjs.json +1567 -1385
- package/dist/meta.esbuild.json +1657 -1551
- package/package.json +6 -6
- package/src/Modal/Dialog.tsx +3 -11
- package/src/Modal/DialogContent.tsx +4 -4
- package/src/Prebuilt/common/constants.js +3 -0
- package/src/Prebuilt/components/AppData/AppData.jsx +4 -11
- package/src/Prebuilt/components/AppData/useSidepane.js +1 -1
- package/src/Prebuilt/components/Connection/ConnectionIndicator.tsx +2 -2
- package/src/Prebuilt/components/Footer/Footer.tsx +4 -8
- package/src/Prebuilt/components/Footer/ParticipantList.jsx +1 -6
- package/src/Prebuilt/components/Header/Header.tsx +2 -2
- package/src/Prebuilt/components/Header/common.jsx +46 -23
- package/src/Prebuilt/components/Leave/DesktopLeaveRoom.tsx +5 -5
- package/src/Prebuilt/components/Leave/EndSessionContent.tsx +2 -2
- package/src/Prebuilt/components/Leave/LeaveRoom.tsx +6 -5
- package/src/Prebuilt/components/Leave/LeaveSessionContent.tsx +2 -2
- package/src/Prebuilt/components/Leave/MwebLeaveRoom.tsx +3 -3
- package/src/Prebuilt/components/Notifications/HLSFailureModal.tsx +1 -4
- package/src/Prebuilt/components/Preview/PreviewForm.tsx +7 -2
- package/src/Prebuilt/components/Preview/PreviewJoin.tsx +62 -57
- package/src/Prebuilt/components/RoleChangeRequest/RequestPrompt.tsx +2 -3
- package/src/Prebuilt/components/Settings/DeviceSettings.jsx +11 -0
- package/src/Prebuilt/components/VirtualBackground/VBCollection.tsx +50 -0
- package/src/Prebuilt/components/VirtualBackground/VBOption.tsx +50 -0
- package/src/Prebuilt/components/VirtualBackground/VBPicker.jsx +165 -0
- package/src/Prebuilt/components/VirtualBackground/VBToggle.jsx +25 -0
- package/src/Prebuilt/components/VirtualBackground/constants.ts +26 -0
- package/src/Prebuilt/components/hooks/useAutoStartStreaming.tsx +4 -7
- package/src/Prebuilt/layouts/HLSView.jsx +7 -1
- package/src/Prebuilt/layouts/SidePane.tsx +21 -5
- package/dist/HLSView-VGJ2XUDT.js.map +0 -7
- package/dist/VirtualBackground-2VZVBRIC.js +0 -175
- package/dist/VirtualBackground-2VZVBRIC.js.map +0 -7
- package/dist/chunk-EDGWHFCM.js.map +0 -7
- package/dist/chunk-SONHO3VM.js +0 -962
- package/dist/chunk-SONHO3VM.js.map +0 -7
package/package.json
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
"prebuilt",
|
11
11
|
"roomkit"
|
12
12
|
],
|
13
|
-
"version": "0.1.
|
13
|
+
"version": "0.1.10",
|
14
14
|
"author": "100ms",
|
15
15
|
"license": "MIT",
|
16
16
|
"files": [
|
@@ -76,10 +76,10 @@
|
|
76
76
|
"react": ">=17.0.2 <19.0.0"
|
77
77
|
},
|
78
78
|
"dependencies": {
|
79
|
-
"@100mslive/hls-player": "0.1.
|
80
|
-
"@100mslive/hms-virtual-background": "1.11.
|
81
|
-
"@100mslive/react-icons": "0.8.
|
82
|
-
"@100mslive/react-sdk": "0.8.
|
79
|
+
"@100mslive/hls-player": "0.1.19",
|
80
|
+
"@100mslive/hms-virtual-background": "1.11.19",
|
81
|
+
"@100mslive/react-icons": "0.8.19",
|
82
|
+
"@100mslive/react-sdk": "0.8.19",
|
83
83
|
"@100mslive/types-prebuilt": "0.12.0",
|
84
84
|
"@emoji-mart/data": "^1.0.6",
|
85
85
|
"@emoji-mart/react": "^1.0.1",
|
@@ -114,5 +114,5 @@
|
|
114
114
|
"uuid": "^8.3.2",
|
115
115
|
"worker-timers": "^7.0.40"
|
116
116
|
},
|
117
|
-
"gitHead": "
|
117
|
+
"gitHead": "0764f906bf58ec5d5c4738942ad6411ffa07eddc"
|
118
118
|
}
|
package/src/Modal/Dialog.tsx
CHANGED
@@ -1,28 +1,20 @@
|
|
1
1
|
import React, { ReactNode, useRef } from 'react';
|
2
2
|
import { Root } from '@radix-ui/react-dialog';
|
3
3
|
import { styled } from '@stitches/react';
|
4
|
-
import { CSS } from '../Theme';
|
5
4
|
import {
|
5
|
+
CustomDialogContent,
|
6
|
+
CustomDialogOverlay,
|
6
7
|
DialogClose,
|
7
8
|
DialogDefaultCloseIcon,
|
8
9
|
DialogDescription,
|
9
10
|
DialogTitle,
|
10
|
-
StyledDialogContent,
|
11
|
-
StyledDialogOverlay,
|
12
11
|
StyledDialogPortal,
|
13
12
|
StyledDialogTrigger,
|
14
13
|
} from './DialogContent';
|
15
14
|
import { useDialogContainerSelector } from '../hooks/useDialogContainerSelector';
|
16
15
|
|
17
16
|
const StyledDialog = styled(Root, {});
|
18
|
-
|
19
|
-
<StyledDialogContent css={{ ...css, position: 'absolute' }} {...props}>
|
20
|
-
{children}
|
21
|
-
</StyledDialogContent>
|
22
|
-
);
|
23
|
-
const CustomDialogOverlay = ({ css = {} }: { css?: CSS }) => (
|
24
|
-
<StyledDialogOverlay css={{ ...css, position: 'absolute' }} />
|
25
|
-
);
|
17
|
+
|
26
18
|
const CustomDialogPortal = ({ children, container }: { children: ReactNode; container?: HTMLElement | null }) => {
|
27
19
|
const dialogContainerSelector = useDialogContainerSelector();
|
28
20
|
const containerRef = useRef<HTMLElement | null>(null);
|
@@ -17,19 +17,19 @@ export const StyledDialogTrigger = styled(DialogPrimitive.Trigger, {
|
|
17
17
|
appearance: 'none !important', // Needed for safari it shows white overlay
|
18
18
|
});
|
19
19
|
|
20
|
-
export const
|
20
|
+
export const CustomDialogOverlay = styled(DialogPrimitive.Overlay, {
|
21
21
|
backgroundColor: 'rgba(0, 0, 0, 0.5);',
|
22
|
-
position: '
|
22
|
+
position: 'absolute',
|
23
23
|
inset: 0,
|
24
24
|
});
|
25
25
|
|
26
26
|
export const StyledDialogPortal = styled(DialogPrimitive.Portal, {});
|
27
27
|
|
28
|
-
export const
|
28
|
+
export const CustomDialogContent = styled(DialogPrimitive.Content, {
|
29
29
|
color: '$on_surface_medium',
|
30
30
|
backgroundColor: '$surface_default',
|
31
31
|
borderRadius: '8px',
|
32
|
-
position: '
|
32
|
+
position: 'absolute',
|
33
33
|
top: '50%',
|
34
34
|
left: '50%',
|
35
35
|
border: '$space$px solid $border_bright',
|
@@ -46,6 +46,8 @@ export const APP_DATA = {
|
|
46
46
|
activeScreensharePeerId: 'activeScreensharePeerId',
|
47
47
|
disableNotifications: 'disableNotifications',
|
48
48
|
pollState: 'pollState',
|
49
|
+
background: 'background',
|
50
|
+
backgroundType: 'backgroundType',
|
49
51
|
};
|
50
52
|
export const UI_SETTINGS = {
|
51
53
|
isAudioOnly: 'isAudioOnly',
|
@@ -61,6 +63,7 @@ export const SIDE_PANE_OPTIONS = {
|
|
61
63
|
CHAT: 'Chat',
|
62
64
|
STREAMING: 'STREAMING',
|
63
65
|
POLLS: 'POLLS',
|
66
|
+
VB: 'VB',
|
64
67
|
};
|
65
68
|
|
66
69
|
export const POLL_STATE = {
|
@@ -4,7 +4,6 @@ import {
|
|
4
4
|
selectAvailableRoleNames,
|
5
5
|
selectFullAppData,
|
6
6
|
selectHLSState,
|
7
|
-
selectIsConnectedToRoom,
|
8
7
|
selectLocalPeerRoleName,
|
9
8
|
selectRolesMap,
|
10
9
|
selectRoomState,
|
@@ -15,7 +14,7 @@ import {
|
|
15
14
|
} from '@100mslive/react-sdk';
|
16
15
|
import { normalizeAppPolicyConfig } from '../init/initUtils';
|
17
16
|
import { UserPreferencesKeys, useUserPreferences } from '../hooks/useUserPreferences';
|
18
|
-
import { useIsSidepaneTypeOpen,
|
17
|
+
import { useIsSidepaneTypeOpen, useSidepaneToggle } from './useSidepane';
|
19
18
|
import { useSetAppDataByKey } from './useUISettings';
|
20
19
|
import {
|
21
20
|
APP_DATA,
|
@@ -26,6 +25,7 @@ import {
|
|
26
25
|
UI_MODE_GRID,
|
27
26
|
UI_SETTINGS,
|
28
27
|
} from '../../common/constants';
|
28
|
+
import { VB_EFFECT } from '../VirtualBackground/constants';
|
29
29
|
|
30
30
|
export const getAppDetails = appDetails => {
|
31
31
|
try {
|
@@ -67,6 +67,8 @@ const initialAppData = {
|
|
67
67
|
[APP_DATA.minimiseInset]: false,
|
68
68
|
[APP_DATA.activeScreensharePeerId]: '',
|
69
69
|
[APP_DATA.disableNotifications]: false,
|
70
|
+
[APP_DATA.background]: VB_EFFECT.NONE,
|
71
|
+
[APP_DATA.backgroundType]: VB_EFFECT.NONE,
|
70
72
|
[APP_DATA.pollState]: {
|
71
73
|
[POLL_STATE.pollInView]: '',
|
72
74
|
[POLL_STATE.view]: '',
|
@@ -75,21 +77,12 @@ const initialAppData = {
|
|
75
77
|
|
76
78
|
export const AppData = React.memo(({ appDetails, tokenEndpoint }) => {
|
77
79
|
const hmsActions = useHMSActions();
|
78
|
-
const isConnected = useHMSStore(selectIsConnectedToRoom);
|
79
|
-
const sidePane = useSidepaneState();
|
80
|
-
const resetSidePane = useSidepaneReset();
|
81
80
|
const [preferences = {}] = useUserPreferences(UserPreferencesKeys.UI_SETTINGS);
|
82
81
|
const roleNames = useHMSStore(selectAvailableRoleNames);
|
83
82
|
const rolesMap = useHMSStore(selectRolesMap);
|
84
83
|
const localPeerRole = useHMSStore(selectLocalPeerRoleName);
|
85
84
|
const appData = useHMSStore(selectFullAppData);
|
86
85
|
|
87
|
-
useEffect(() => {
|
88
|
-
if (!isConnected && sidePane && sidePane !== SIDE_PANE_OPTIONS.PARTICIPANTS) {
|
89
|
-
resetSidePane();
|
90
|
-
}
|
91
|
-
}, [isConnected, sidePane, resetSidePane]);
|
92
|
-
|
93
86
|
useEffect(() => {
|
94
87
|
hmsActions.initAppData({
|
95
88
|
...initialAppData,
|
@@ -39,7 +39,7 @@ export const ConnectionIndicator = ({
|
|
39
39
|
}
|
40
40
|
if (downlinkQuality === 0) {
|
41
41
|
return (
|
42
|
-
<Tooltip title={getTooltipText(downlinkQuality)}>
|
42
|
+
<Tooltip side="left" title={getTooltipText(downlinkQuality)}>
|
43
43
|
<Wrapper isTile={isTile} css={{ color: '#ED4C5A' }} data-testid="tile_network">
|
44
44
|
<PoorConnectivityIcon />
|
45
45
|
</Wrapper>
|
@@ -48,7 +48,7 @@ export const ConnectionIndicator = ({
|
|
48
48
|
}
|
49
49
|
const size = isTile ? 12 : 16;
|
50
50
|
return (
|
51
|
-
<Tooltip title={getTooltipText(downlinkQuality)}>
|
51
|
+
<Tooltip side="left" title={getTooltipText(downlinkQuality)}>
|
52
52
|
<Wrapper isTile={isTile} data-testid="tile_network" css={{ backgroundColor: hideBg ? '' : '$surface_bright' }}>
|
53
53
|
<svg
|
54
54
|
width={size}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React, {
|
1
|
+
import React, { useEffect } from 'react';
|
2
2
|
import { useMedia } from 'react-use';
|
3
3
|
import {
|
4
4
|
ConferencingScreen,
|
@@ -21,6 +21,8 @@ import { RaiseHand } from '../RaiseHand';
|
|
21
21
|
// @ts-ignore: No implicit Any
|
22
22
|
import { ScreenshareToggle } from '../ScreenShareToggle';
|
23
23
|
// @ts-ignore: No implicit Any
|
24
|
+
import { VBToggle } from '../VirtualBackground/VBToggle';
|
25
|
+
// @ts-ignore: No implicit Any
|
24
26
|
import { ChatToggle } from './ChatToggle';
|
25
27
|
// @ts-ignore: No implicit Any
|
26
28
|
import { ParticipantCount } from './ParticipantList';
|
@@ -31,8 +33,6 @@ import { useIsSidepaneTypeOpen, useSidepaneToggle } from '../AppData/useSidepane
|
|
31
33
|
import { useShowPolls } from '../AppData/useUISettings';
|
32
34
|
// @ts-ignore: No implicit Any
|
33
35
|
import { SIDE_PANE_OPTIONS } from '../../common/constants';
|
34
|
-
// @ts-ignore: No implicit Any
|
35
|
-
const VirtualBackground = React.lazy(() => import('../../plugins/VirtualBackground/VirtualBackground'));
|
36
36
|
|
37
37
|
export const Footer = ({
|
38
38
|
screenType,
|
@@ -82,11 +82,7 @@ export const Footer = ({
|
|
82
82
|
>
|
83
83
|
{isMobile ? <LeaveRoom screenType={screenType} /> : null}
|
84
84
|
<AudioVideoToggle />
|
85
|
-
{isMobile ? null :
|
86
|
-
<Suspense fallback={<></>}>
|
87
|
-
<VirtualBackground />
|
88
|
-
</Suspense>
|
89
|
-
)}
|
85
|
+
{isMobile ? null : <VBToggle />}
|
90
86
|
</AppFooter.Left>
|
91
87
|
<AppFooter.Center
|
92
88
|
css={{
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React, { Fragment, useCallback,
|
1
|
+
import React, { Fragment, useCallback, useState } from 'react';
|
2
2
|
import { useDebounce, useMedia } from 'react-use';
|
3
3
|
import {
|
4
4
|
selectHandRaisedPeers,
|
@@ -96,11 +96,6 @@ export const ParticipantCount = () => {
|
|
96
96
|
const peerCount = useHMSStore(selectPeerCount);
|
97
97
|
const toggleSidepane = useSidepaneToggle(SIDE_PANE_OPTIONS.PARTICIPANTS);
|
98
98
|
const isParticipantsOpen = useIsSidepaneTypeOpen(SIDE_PANE_OPTIONS.PARTICIPANTS);
|
99
|
-
useEffect(() => {
|
100
|
-
if (isParticipantsOpen && peerCount === 0) {
|
101
|
-
toggleSidepane();
|
102
|
-
}
|
103
|
-
}, [isParticipantsOpen, peerCount, toggleSidepane]);
|
104
99
|
|
105
100
|
if (peerCount === 0) {
|
106
101
|
return null;
|
@@ -7,7 +7,7 @@ import { Logo, SpeakerTag } from './HeaderComponents';
|
|
7
7
|
// @ts-ignore: No implicit any
|
8
8
|
import { LiveStatus, RecordingStatus, StreamActions } from './StreamActions';
|
9
9
|
// @ts-ignore: No implicit any
|
10
|
-
import {
|
10
|
+
import { AudioActions, CamaraFlipActions } from './common';
|
11
11
|
|
12
12
|
export const Header = () => {
|
13
13
|
const roomState = useHMSStore(selectRoomState);
|
@@ -40,7 +40,7 @@ export const Header = () => {
|
|
40
40
|
{isMobile ? (
|
41
41
|
<>
|
42
42
|
<CamaraFlipActions />
|
43
|
-
<
|
43
|
+
<AudioActions />
|
44
44
|
</>
|
45
45
|
) : null}
|
46
46
|
</Flex>
|
@@ -8,7 +8,14 @@ import {
|
|
8
8
|
useHMSActions,
|
9
9
|
useHMSStore,
|
10
10
|
} from '@100mslive/react-sdk';
|
11
|
-
import {
|
11
|
+
import {
|
12
|
+
BluetoothIcon,
|
13
|
+
CameraFlipIcon,
|
14
|
+
CheckIcon,
|
15
|
+
CrossIcon,
|
16
|
+
HeadphonesIcon,
|
17
|
+
SpeakerIcon,
|
18
|
+
} from '@100mslive/react-icons';
|
12
19
|
import { HorizontalDivider } from '../../../Divider';
|
13
20
|
import { Label } from '../../../Label';
|
14
21
|
import { Box, Flex } from '../../../Layout';
|
@@ -49,48 +56,64 @@ export const CamaraFlipActions = () => {
|
|
49
56
|
);
|
50
57
|
};
|
51
58
|
|
52
|
-
|
59
|
+
// It will handle and show audio input devices in Mweb while audio output devices in desktop
|
60
|
+
export const AudioActions = () => {
|
53
61
|
const { allDevices, selectedDeviceIDs, updateDevice } = useDevices();
|
54
|
-
|
62
|
+
|
55
63
|
// don't show speaker selector where the API is not supported, and use
|
56
64
|
// a generic word("Audio") for Mic. In some cases(Chrome Android for e.g.) this changes both mic and speaker keeping them in sync.
|
57
65
|
const shouldShowAudioOutput = 'setSinkId' in HTMLMediaElement.prototype;
|
66
|
+
const { audioInput, audioOutput } = allDevices;
|
67
|
+
let availableAudioDevices = audioInput;
|
68
|
+
let selectedAudio = selectedDeviceIDs.audioInput;
|
69
|
+
if (shouldShowAudioOutput) {
|
70
|
+
availableAudioDevices = audioOutput;
|
71
|
+
selectedAudio = selectedDeviceIDs.audioOutput;
|
72
|
+
}
|
73
|
+
const hmsActions = useHMSActions();
|
74
|
+
const audioFiltered = availableAudioDevices?.find(item => !!item.label);
|
75
|
+
const currentSelection = availableAudioDevices?.find(item => item.deviceId === selectedAudio);
|
58
76
|
|
59
|
-
|
60
|
-
* Chromium browsers return an audioOutput with empty label when no permissions are given
|
61
|
-
*/
|
62
|
-
const audioOutputFiltered = audioOutput?.filter(item => !!item.label) ?? [];
|
63
|
-
if (!shouldShowAudioOutput || !audioOutputFiltered?.length > 0) {
|
77
|
+
if (!audioFiltered) {
|
64
78
|
return null;
|
65
79
|
}
|
80
|
+
let AudioIcon = <SpeakerIcon />;
|
81
|
+
if (currentSelection && currentSelection.label.toLowerCase().includes('bluetooth')) {
|
82
|
+
AudioIcon = <BluetoothIcon />;
|
83
|
+
} else if (currentSelection && currentSelection.label.toLowerCase().includes('wired')) {
|
84
|
+
AudioIcon = <HeadphonesIcon />;
|
85
|
+
}
|
66
86
|
return (
|
67
|
-
<
|
68
|
-
|
69
|
-
|
87
|
+
<AudioSelectionSheet
|
88
|
+
audioDevices={availableAudioDevices}
|
89
|
+
audioSelected={selectedAudio}
|
70
90
|
onChange={async deviceId => {
|
71
91
|
try {
|
72
92
|
await updateDevice({
|
73
93
|
deviceId,
|
74
|
-
deviceType: DeviceType.audioOutput,
|
94
|
+
deviceType: shouldShowAudioOutput ? DeviceType.audioOutput : DeviceType.audioInput,
|
75
95
|
});
|
76
96
|
} catch (e) {
|
77
97
|
ToastManager.addToast({
|
78
|
-
title: `Error while changing audio
|
98
|
+
title: `Error while changing audio device ${e.message || ''}`,
|
79
99
|
variant: 'error',
|
80
100
|
});
|
81
101
|
}
|
82
102
|
}}
|
83
103
|
>
|
84
|
-
<Box
|
85
|
-
|
86
|
-
|
87
|
-
|
104
|
+
<Box
|
105
|
+
onClick={async () => {
|
106
|
+
// refresh device as `devicechange` listener won't work in mobile device
|
107
|
+
await hmsActions.refreshDevices();
|
108
|
+
}}
|
109
|
+
>
|
110
|
+
<IconButton>{AudioIcon} </IconButton>
|
88
111
|
</Box>
|
89
|
-
</
|
112
|
+
</AudioSelectionSheet>
|
90
113
|
);
|
91
114
|
};
|
92
115
|
|
93
|
-
const
|
116
|
+
const AudioSelectionSheet = ({ audioDevices, audioSelected, onChange, children }) => {
|
94
117
|
return (
|
95
118
|
<Sheet.Root>
|
96
119
|
<Sheet.Trigger asChild>{children}</Sheet.Trigger>
|
@@ -98,7 +121,7 @@ const AudioOutputSelectionSheet = ({ outputDevices, outputSelected, onChange, ch
|
|
98
121
|
<Sheet.Title css={{ py: '$10', px: '$8', alignItems: 'center' }}>
|
99
122
|
<Flex direction="row" justify="between" css={{ w: '100%' }}>
|
100
123
|
<Text variant="h6" css={{ display: 'flex' }}>
|
101
|
-
Audio
|
124
|
+
Audio
|
102
125
|
</Text>
|
103
126
|
<Sheet.Close>
|
104
127
|
<IconButton as="div" data-testid="dialog_cross_icon">
|
@@ -113,16 +136,16 @@ const AudioOutputSelectionSheet = ({ outputDevices, outputSelected, onChange, ch
|
|
113
136
|
css={{
|
114
137
|
px: '$8',
|
115
138
|
maxHeight: '80vh',
|
116
|
-
overflowY: '
|
139
|
+
overflowY: 'auto',
|
117
140
|
}}
|
118
141
|
>
|
119
|
-
{
|
142
|
+
{audioDevices.map(audioDevice => {
|
120
143
|
return (
|
121
144
|
<SelectWithLabel
|
122
145
|
key={audioDevice.deviceId}
|
123
146
|
label={audioDevice.label}
|
124
147
|
id={audioDevice.deviceId}
|
125
|
-
checked={audioDevice.deviceId ===
|
148
|
+
checked={audioDevice.deviceId === audioSelected}
|
126
149
|
onChange={() => onChange(audioDevice.deviceId)}
|
127
150
|
/>
|
128
151
|
);
|
@@ -20,9 +20,9 @@ export const DesktopLeaveRoom = ({
|
|
20
20
|
screenType,
|
21
21
|
endRoom,
|
22
22
|
}: {
|
23
|
-
leaveRoom: (
|
23
|
+
leaveRoom: (options?: { endStream?: boolean }) => Promise<void>;
|
24
24
|
screenType: keyof ConferencingScreen;
|
25
|
-
endRoom: () => void
|
25
|
+
endRoom: () => Promise<void>;
|
26
26
|
}) => {
|
27
27
|
const [open, setOpen] = useState(false);
|
28
28
|
const [showLeaveRoomAlert, setShowLeaveRoomAlert] = useState(false);
|
@@ -78,7 +78,7 @@ export const DesktopLeaveRoom = ({
|
|
78
78
|
color: '$on_surface_medium',
|
79
79
|
'&:hover': { bg: '$surface_default', color: '$on_surface_high' },
|
80
80
|
}}
|
81
|
-
onClick={() => leaveRoom(
|
81
|
+
onClick={async () => await leaveRoom()}
|
82
82
|
data-testid="just_leave_btn"
|
83
83
|
>
|
84
84
|
<LeaveCard
|
@@ -89,7 +89,7 @@ export const DesktopLeaveRoom = ({
|
|
89
89
|
bg=""
|
90
90
|
titleColor="$on_surface_high"
|
91
91
|
icon={<ExitIcon height={24} width={24} style={{ transform: 'rotate(180deg)' }} />}
|
92
|
-
onClick={() => leaveRoom(
|
92
|
+
onClick={async () => await leaveRoom()}
|
93
93
|
css={{ p: 0 }}
|
94
94
|
/>
|
95
95
|
</Dropdown.Item>
|
@@ -142,7 +142,7 @@ export const DesktopLeaveRoom = ({
|
|
142
142
|
<Dialog.Content css={{ w: 'min(420px, 90%)', p: '$8', bg: '$surface_dim' }}>
|
143
143
|
<EndSessionContent
|
144
144
|
setShowEndStreamAlert={setShowEndStreamAlert}
|
145
|
-
leaveRoom={isStreamingOn ? leaveRoom : endRoom}
|
145
|
+
leaveRoom={isStreamingOn ? () => leaveRoom({ endStream: true }) : endRoom}
|
146
146
|
isStreamingOn={isStreamingOn}
|
147
147
|
isModal
|
148
148
|
/>
|
@@ -11,7 +11,7 @@ export const EndSessionContent = ({
|
|
11
11
|
isStreamingOn = false,
|
12
12
|
}: {
|
13
13
|
setShowEndStreamAlert: (value: boolean) => void;
|
14
|
-
leaveRoom: (
|
14
|
+
leaveRoom: (options?: { endStream?: boolean }) => Promise<void>;
|
15
15
|
isModal?: boolean;
|
16
16
|
isStreamingOn: boolean;
|
17
17
|
}) => {
|
@@ -50,7 +50,7 @@ export const EndSessionContent = ({
|
|
50
50
|
variant="danger"
|
51
51
|
css={{ w: '100%' }}
|
52
52
|
onClick={async () => {
|
53
|
-
await leaveRoom({
|
53
|
+
await leaveRoom({ endStream: true });
|
54
54
|
setShowEndStreamAlert(false);
|
55
55
|
}}
|
56
56
|
id="stopStream"
|
@@ -46,15 +46,16 @@ export const LeaveRoom = ({ screenType }: { screenType: keyof ConferencingScreen
|
|
46
46
|
ToastManager.addToast({ title: 'Error in stopping the stream', type: 'error' });
|
47
47
|
}
|
48
48
|
};
|
49
|
-
|
50
|
-
|
49
|
+
|
50
|
+
const endRoom = async () => {
|
51
|
+
await hmsActions.endRoom(false, 'End Room');
|
51
52
|
};
|
52
53
|
|
53
|
-
const leaveRoom = async ({
|
54
|
-
if (
|
54
|
+
const leaveRoom = async (options: { endStream?: boolean } = { endStream: false }) => {
|
55
|
+
if (options.endStream || (hlsState.running && peersWithStreamingRights.length === 1)) {
|
55
56
|
await stopStream();
|
56
57
|
}
|
57
|
-
hmsActions.leave();
|
58
|
+
await hmsActions.leave();
|
58
59
|
};
|
59
60
|
|
60
61
|
if (!permissions || !isConnected) {
|
@@ -10,7 +10,7 @@ export const LeaveSessionContent = ({
|
|
10
10
|
isModal = false,
|
11
11
|
}: {
|
12
12
|
setShowLeaveRoomAlert: (value: boolean) => void;
|
13
|
-
leaveRoom: (
|
13
|
+
leaveRoom: (options?: { endStream?: boolean }) => Promise<void>;
|
14
14
|
isModal?: boolean;
|
15
15
|
}) => {
|
16
16
|
return (
|
@@ -47,7 +47,7 @@ export const LeaveSessionContent = ({
|
|
47
47
|
<Button
|
48
48
|
variant="danger"
|
49
49
|
css={{ w: '100%' }}
|
50
|
-
onClick={() => leaveRoom(
|
50
|
+
onClick={async () => await leaveRoom()}
|
51
51
|
id="leaveRoom"
|
52
52
|
data-testid="leave_room"
|
53
53
|
>
|
@@ -19,9 +19,9 @@ export const MwebLeaveRoom = ({
|
|
19
19
|
screenType,
|
20
20
|
endRoom,
|
21
21
|
}: {
|
22
|
-
leaveRoom: (
|
22
|
+
leaveRoom: (options?: { endStream?: boolean }) => Promise<void>;
|
23
23
|
screenType: keyof ConferencingScreen;
|
24
|
-
endRoom: () => void
|
24
|
+
endRoom: () => Promise<void>;
|
25
25
|
}) => {
|
26
26
|
const [open, setOpen] = useState(false);
|
27
27
|
const [showLeaveRoomAlert, setShowLeaveRoomAlert] = useState(false);
|
@@ -67,7 +67,7 @@ export const MwebLeaveRoom = ({
|
|
67
67
|
bg="$surface_default"
|
68
68
|
titleColor="$on_surface_high"
|
69
69
|
icon={<ExitIcon height={24} width={24} style={{ transform: 'rotate(180deg)' }} />}
|
70
|
-
onClick={() => leaveRoom(
|
70
|
+
onClick={async () => await leaveRoom()}
|
71
71
|
css={{ pt: 0, mt: '$10', color: '$on_surface_low', '&:hover': { color: '$on_surface_high' } }}
|
72
72
|
/>
|
73
73
|
|
@@ -23,10 +23,7 @@ export function HLSFailureModal() {
|
|
23
23
|
setHLSStarted(true);
|
24
24
|
await hmsActions.startHLSStreaming({});
|
25
25
|
} catch (error) {
|
26
|
-
|
27
|
-
await startHLS();
|
28
|
-
return;
|
29
|
-
}
|
26
|
+
console.error(error);
|
30
27
|
setHLSStarted(false);
|
31
28
|
}
|
32
29
|
}, [hmsActions, isHLSStarted, setHLSStarted, isRTMPRunning]);
|
@@ -27,11 +27,16 @@ const PreviewForm = ({
|
|
27
27
|
e.preventDefault();
|
28
28
|
};
|
29
29
|
const isMobile = useMedia(cssConfig.media.md);
|
30
|
-
const { isHLSRunning, isRTMPRunning } = useRecordingStreaming();
|
30
|
+
const { isHLSRunning, isRTMPRunning, isRecordingOn } = useRecordingStreaming();
|
31
|
+
|
31
32
|
const layout = useRoomLayout();
|
32
33
|
const { join_form: joinForm = {} } = layout?.screens?.preview?.default?.elements || {};
|
34
|
+
|
33
35
|
const showGoLive =
|
34
|
-
joinForm?.join_btn_type === JoinForm_JoinBtnType.JOIN_BTN_TYPE_JOIN_AND_GO_LIVE &&
|
36
|
+
joinForm?.join_btn_type === JoinForm_JoinBtnType.JOIN_BTN_TYPE_JOIN_AND_GO_LIVE &&
|
37
|
+
!isHLSRunning &&
|
38
|
+
!isRTMPRunning &&
|
39
|
+
!isRecordingOn;
|
35
40
|
|
36
41
|
return (
|
37
42
|
<Form
|