@100mslive/roomkit-react 0.1.6-alpha.0 → 0.1.6-alpha.1
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/{HLSView-PY2FKWX3.js → HLSView-HNVYG5VE.js} +208 -118
- package/dist/HLSView-HNVYG5VE.js.map +7 -0
- package/dist/Prebuilt/AppContext.d.ts +1 -1
- package/dist/Prebuilt/components/Chat/ChatFooter.d.ts +7 -0
- package/dist/Prebuilt/components/Connection/ConnectionIndicator.d.ts +6 -0
- package/dist/Prebuilt/components/Connection/TileConnection.d.ts +10 -0
- package/dist/Prebuilt/components/Footer/ChatToggle.d.ts +4 -0
- package/dist/Prebuilt/components/Footer/RoleAccordion.d.ts +14 -0
- package/dist/Prebuilt/components/Footer/RoleOptions.d.ts +6 -0
- package/dist/Prebuilt/components/Header/StreamActions.d.ts +11 -0
- package/dist/Prebuilt/components/Leave/DesktopLeaveRoom.d.ts +4 -3
- package/dist/Prebuilt/components/Leave/EndSessionContent.d.ts +4 -3
- package/dist/Prebuilt/components/Leave/LeaveCard.d.ts +1 -2
- package/dist/Prebuilt/components/Leave/LeaveSessionContent.d.ts +3 -1
- package/dist/Prebuilt/components/Leave/MwebLeaveRoom.d.ts +4 -3
- package/dist/Prebuilt/components/MoreSettings/SplitComponents/MwebOptions.d.ts +6 -0
- package/dist/Prebuilt/components/Preview/PreviewContainer.d.ts +3 -0
- package/dist/Prebuilt/components/Preview/PreviewJoin.d.ts +16 -0
- package/dist/Prebuilt/components/RoleChangeRequestModal.d.ts +2 -0
- package/dist/Prebuilt/components/SecondaryTiles.d.ts +1 -1
- package/dist/Prebuilt/components/VideoLayouts/EqualProminence.d.ts +1 -1
- package/dist/Prebuilt/components/VideoLayouts/Grid.d.ts +1 -0
- package/dist/Prebuilt/components/VideoLayouts/GridLayout.d.ts +5 -3
- package/dist/Prebuilt/components/VideoLayouts/ProminenceLayout.d.ts +6 -3
- package/dist/Prebuilt/components/VideoLayouts/RoleProminence.d.ts +1 -1
- package/dist/Prebuilt/components/VideoLayouts/ScreenshareLayout.d.ts +1 -1
- package/dist/Prebuilt/components/VideoLayouts/interface.d.ts +1 -0
- package/dist/Prebuilt/components/hooks/useAutoStartStreaming.d.ts +1 -0
- package/dist/Prebuilt/components/hooks/useRedirectToLeave.d.ts +3 -0
- package/dist/Prebuilt/components/hooks/useTileLayout.d.ts +2 -1
- package/dist/Prebuilt/components/hooks/useVideoTileLayout.d.ts +2 -0
- package/dist/Prebuilt/layouts/SidePane.d.ts +4 -1
- package/dist/Prebuilt/layouts/VideoStreamingSection.d.ts +2 -1
- package/dist/{VirtualBackground-AYDHYLIZ.js → VirtualBackground-UM2FOUHQ.js} +3 -3
- package/dist/{chunk-E2M2ZSOL.js → chunk-364HP22I.js} +2 -2
- package/dist/{chunk-RXTHJUMZ.js → chunk-LYSAET4G.js} +946 -390
- package/dist/chunk-LYSAET4G.js.map +7 -0
- package/dist/{chunk-GQD2AGWW.js → chunk-POE7H4IE.js} +12 -2
- package/dist/{chunk-GQD2AGWW.js.map → chunk-POE7H4IE.js.map} +2 -2
- package/dist/{conference-V2XZGTKU.js → conference-UWLJHMB2.js} +1116 -1316
- package/dist/conference-UWLJHMB2.js.map +7 -0
- package/dist/index.cjs.js +6080 -5631
- package/dist/index.cjs.js.map +4 -4
- package/dist/index.js +2 -2
- package/dist/meta.cjs.json +741 -493
- package/dist/meta.esbuild.json +782 -529
- package/package.json +8 -7
- package/src/Prebuilt/App.tsx +10 -21
- package/src/Prebuilt/AppContext.tsx +1 -1
- package/src/Prebuilt/IconButton.jsx +10 -0
- package/src/Prebuilt/common/PeersSorter.ts +1 -1
- package/src/Prebuilt/common/constants.js +1 -2
- package/src/Prebuilt/common/utils.js +1 -1
- package/src/Prebuilt/components/AppData/AppData.jsx +8 -2
- package/src/Prebuilt/components/AppData/useUISettings.js +6 -6
- package/src/Prebuilt/components/AudioVideoToggle.jsx +8 -6
- package/src/Prebuilt/components/Chat/Chat.jsx +23 -6
- package/src/Prebuilt/components/Chat/ChatBody.jsx +20 -21
- package/src/Prebuilt/components/Chat/{ChatFooter.jsx → ChatFooter.tsx} +38 -13
- package/src/Prebuilt/components/Chat/ChatParticipantHeader.jsx +38 -27
- package/src/Prebuilt/components/Chat/useEmojiPickerStyles.js +5 -4
- package/src/Prebuilt/components/Connection/{ConnectionIndicator.jsx → ConnectionIndicator.tsx} +12 -4
- package/src/Prebuilt/components/Connection/{TileConnection.jsx → TileConnection.tsx} +20 -6
- package/src/Prebuilt/components/EmojiReaction.jsx +2 -6
- package/src/Prebuilt/components/Footer/{ChatToggle.jsx → ChatToggle.tsx} +13 -3
- package/src/Prebuilt/components/Footer/Footer.tsx +15 -6
- package/src/Prebuilt/components/Footer/ParticipantList.jsx +15 -47
- package/src/Prebuilt/components/Footer/{RoleAccordion.jsx → RoleAccordion.tsx} +33 -17
- package/src/Prebuilt/components/Footer/RoleOptions.tsx +155 -0
- package/src/Prebuilt/components/FullPageProgress.jsx +3 -3
- package/src/Prebuilt/components/HMSVideo/Controls.jsx +1 -0
- package/src/Prebuilt/components/HMSVideo/HLSQualitySelector.jsx +39 -17
- package/src/Prebuilt/components/HMSVideo/HMSVideo.jsx +2 -2
- package/src/Prebuilt/components/HMSVideo/VideoProgress.jsx +5 -6
- package/src/Prebuilt/components/HMSVideo/VolumeControl.jsx +1 -1
- package/src/Prebuilt/components/Header/{StreamActions.jsx → StreamActions.tsx} +23 -9
- package/src/Prebuilt/components/Header/common.jsx +5 -2
- package/src/Prebuilt/components/IconButtonWithOptions/IconButtonWithOptions.jsx +6 -1
- package/src/Prebuilt/components/InsetTile.tsx +14 -8
- package/src/Prebuilt/components/Leave/DesktopLeaveRoom.tsx +21 -11
- package/src/Prebuilt/components/Leave/EndSessionContent.tsx +2 -5
- package/src/Prebuilt/components/Leave/LeaveCard.tsx +1 -3
- package/src/Prebuilt/components/Leave/LeaveRoom.tsx +28 -25
- package/src/Prebuilt/components/Leave/LeaveSessionContent.tsx +8 -2
- package/src/Prebuilt/components/Leave/MwebLeaveRoom.tsx +8 -8
- package/src/Prebuilt/components/MoreSettings/ChangeNameContent.jsx +4 -0
- package/src/Prebuilt/components/MoreSettings/MoreSettings.tsx +1 -1
- package/src/Prebuilt/components/MoreSettings/SplitComponents/DesktopOptions.tsx +9 -23
- package/src/Prebuilt/components/MoreSettings/SplitComponents/{MwebOptions.jsx → MwebOptions.tsx} +88 -27
- package/src/Prebuilt/components/Notifications/Notifications.jsx +30 -21
- package/src/Prebuilt/components/Notifications/ReconnectNotifications.jsx +5 -11
- package/src/Prebuilt/components/Pagination.tsx +14 -12
- package/src/Prebuilt/components/Preview/{PreviewContainer.jsx → PreviewContainer.tsx} +11 -2
- package/src/Prebuilt/components/Preview/PreviewForm.tsx +6 -8
- package/src/Prebuilt/components/Preview/{PreviewJoin.jsx → PreviewJoin.tsx} +43 -19
- package/src/Prebuilt/components/{RoleChangeRequestModal.jsx → RoleChangeRequestModal.tsx} +32 -15
- package/src/Prebuilt/components/ScreenshareTile.jsx +6 -7
- package/src/Prebuilt/components/SecondaryTiles.tsx +12 -10
- package/src/Prebuilt/components/TileMenu/TileMenu.jsx +1 -1
- package/src/Prebuilt/components/TileMenu/TileMenuContent.jsx +14 -10
- package/src/Prebuilt/components/Toast/ToastConfig.jsx +5 -4
- package/src/Prebuilt/components/VideoLayouts/EqualProminence.tsx +13 -10
- package/src/Prebuilt/components/VideoLayouts/Grid.tsx +36 -34
- package/src/Prebuilt/components/VideoLayouts/GridLayout.tsx +33 -15
- package/src/Prebuilt/components/VideoLayouts/ProminenceLayout.tsx +45 -31
- package/src/Prebuilt/components/VideoLayouts/RoleProminence.tsx +12 -9
- package/src/Prebuilt/components/VideoLayouts/ScreenshareLayout.tsx +25 -9
- package/src/Prebuilt/components/VideoLayouts/interface.ts +1 -0
- package/src/Prebuilt/components/VideoTile.jsx +45 -53
- package/src/Prebuilt/components/conference.jsx +71 -74
- package/src/Prebuilt/components/hooks/useAutoStartStreaming.tsx +57 -0
- package/src/Prebuilt/components/hooks/useMetadata.jsx +12 -3
- package/src/Prebuilt/components/hooks/useRedirectToLeave.tsx +34 -0
- package/src/Prebuilt/components/hooks/useRoleProminencePeers.tsx +1 -1
- package/src/Prebuilt/components/hooks/useTileLayout.tsx +24 -18
- package/src/Prebuilt/components/hooks/useVideoTileLayout.ts +4 -0
- package/src/Prebuilt/layouts/EmbedView.jsx +1 -11
- package/src/Prebuilt/layouts/HLSView.jsx +152 -82
- package/src/Prebuilt/layouts/SidePane.tsx +15 -3
- package/src/Prebuilt/layouts/VideoStreamingSection.tsx +11 -47
- package/src/Prebuilt/plugins/FlyingEmoji.jsx +14 -2
- package/src/Prebuilt/services/FeatureFlags.jsx +0 -1
- package/src/VideoTile/StyledVideoTile.tsx +1 -0
- package/dist/HLSView-PY2FKWX3.js.map +0 -7
- package/dist/chunk-RXTHJUMZ.js.map +0 -7
- package/dist/conference-V2XZGTKU.js.map +0 -7
- package/src/Prebuilt/components/AudioLevel/BeamSpeakerLabelsLogging.jsx +0 -16
- package/src/Prebuilt/components/VideoList.jsx +0 -73
- /package/dist/{VirtualBackground-AYDHYLIZ.js.map → VirtualBackground-UM2FOUHQ.js.map} +0 -0
- /package/dist/{chunk-E2M2ZSOL.js.map → chunk-364HP22I.js.map} +0 -0
@@ -15,11 +15,9 @@ import { useDropdownList } from '../hooks/useDropdownList';
|
|
15
15
|
|
16
16
|
export const DesktopLeaveRoom = ({
|
17
17
|
leaveRoom,
|
18
|
-
stopStream,
|
19
18
|
screenType,
|
20
19
|
}: {
|
21
|
-
leaveRoom: () => void;
|
22
|
-
stopStream: () => Promise<void>;
|
20
|
+
leaveRoom: (args: { endstream: boolean }) => void;
|
23
21
|
screenType: keyof ConferencingScreen;
|
24
22
|
}) => {
|
25
23
|
const [open, setOpen] = useState(false);
|
@@ -51,7 +49,7 @@ export const DesktopLeaveRoom = ({
|
|
51
49
|
if (screenType === 'hls_live_streaming') {
|
52
50
|
setShowLeaveRoomAlert(true);
|
53
51
|
} else {
|
54
|
-
leaveRoom();
|
52
|
+
leaveRoom({ endstream: false });
|
55
53
|
}
|
56
54
|
}}
|
57
55
|
>
|
@@ -75,7 +73,15 @@ export const DesktopLeaveRoom = ({
|
|
75
73
|
</MenuTriggerButton>
|
76
74
|
</Dropdown.Trigger>
|
77
75
|
<Dropdown.Content css={{ p: 0, w: '$100' }} alignOffset={-50} sideOffset={10}>
|
78
|
-
<Dropdown.Item
|
76
|
+
<Dropdown.Item
|
77
|
+
css={{
|
78
|
+
bg: '$surface_dim',
|
79
|
+
color: '$on_surface_low',
|
80
|
+
'&:hover': { bg: '$surface_default', color: '$on_surface_high' },
|
81
|
+
}}
|
82
|
+
onClick={() => leaveRoom({ endstream: false })}
|
83
|
+
data-testid="just_leave_btn"
|
84
|
+
>
|
79
85
|
<LeaveCard
|
80
86
|
title={showStream ? 'Leave Stream' : 'Leave Session'}
|
81
87
|
subtitle={`Others will continue after you leave. You can join the ${
|
@@ -83,14 +89,20 @@ export const DesktopLeaveRoom = ({
|
|
83
89
|
} again.`}
|
84
90
|
bg=""
|
85
91
|
titleColor="$on_surface_high"
|
86
|
-
subtitleColor="$on_surface_low"
|
87
92
|
icon={<ExitIcon height={24} width={24} style={{ transform: 'rotate(180deg)' }} />}
|
88
|
-
onClick={leaveRoom}
|
93
|
+
onClick={() => leaveRoom({ endstream: false })}
|
89
94
|
css={{ p: 0 }}
|
90
95
|
/>
|
91
96
|
</Dropdown.Item>
|
92
97
|
{isStreamingOn && permissions?.hlsStreaming ? (
|
93
|
-
<Dropdown.Item
|
98
|
+
<Dropdown.Item
|
99
|
+
css={{
|
100
|
+
bg: '$alert_error_dim',
|
101
|
+
color: '$alert_error_bright',
|
102
|
+
'&:hover': { bg: '$alert_error_dim', color: '$alert_error_brighter' },
|
103
|
+
}}
|
104
|
+
data-testid="end_room_btn"
|
105
|
+
>
|
94
106
|
<LeaveCard
|
95
107
|
title={showStream ? 'End Stream' : 'End Session'}
|
96
108
|
subtitle={`The ${
|
@@ -98,7 +110,6 @@ export const DesktopLeaveRoom = ({
|
|
98
110
|
} will end for everyone. You can't undo this action.`}
|
99
111
|
bg=""
|
100
112
|
titleColor="$alert_error_brighter"
|
101
|
-
subtitleColor="$alert_error_bright"
|
102
113
|
icon={<StopIcon height={24} width={24} />}
|
103
114
|
onClick={() => {
|
104
115
|
setOpen(false);
|
@@ -117,7 +128,7 @@ export const DesktopLeaveRoom = ({
|
|
117
128
|
if (screenType === 'hls_live_streaming') {
|
118
129
|
setShowLeaveRoomAlert(true);
|
119
130
|
} else {
|
120
|
-
leaveRoom();
|
131
|
+
leaveRoom({ endstream: false });
|
121
132
|
}
|
122
133
|
}}
|
123
134
|
key="LeaveRoom"
|
@@ -137,7 +148,6 @@ export const DesktopLeaveRoom = ({
|
|
137
148
|
<Dialog.Content css={{ w: 'min(420px, 90%)', p: '$8', bg: '$surface_dim' }}>
|
138
149
|
<EndSessionContent
|
139
150
|
setShowEndStreamAlert={setShowEndStreamAlert}
|
140
|
-
stopStream={stopStream}
|
141
151
|
leaveRoom={leaveRoom}
|
142
152
|
isStreamingOn={isStreamingOn}
|
143
153
|
isModal
|
@@ -6,14 +6,12 @@ import { Text } from '../../../Text';
|
|
6
6
|
|
7
7
|
export const EndSessionContent = ({
|
8
8
|
setShowEndStreamAlert,
|
9
|
-
stopStream,
|
10
9
|
leaveRoom,
|
11
10
|
isModal = false,
|
12
11
|
isStreamingOn = false,
|
13
12
|
}: {
|
14
13
|
setShowEndStreamAlert: (value: boolean) => void;
|
15
|
-
|
16
|
-
leaveRoom: () => void;
|
14
|
+
leaveRoom: (args: { endstream: boolean }) => void;
|
17
15
|
isModal?: boolean;
|
18
16
|
isStreamingOn: boolean;
|
19
17
|
}) => {
|
@@ -52,8 +50,7 @@ export const EndSessionContent = ({
|
|
52
50
|
variant="danger"
|
53
51
|
css={{ w: '100%' }}
|
54
52
|
onClick={async () => {
|
55
|
-
await
|
56
|
-
leaveRoom();
|
53
|
+
await leaveRoom({ endstream: true });
|
57
54
|
setShowEndStreamAlert(false);
|
58
55
|
}}
|
59
56
|
id="stopStream"
|
@@ -10,7 +10,6 @@ export const LeaveCard = ({
|
|
10
10
|
onClick,
|
11
11
|
bg,
|
12
12
|
titleColor,
|
13
|
-
subtitleColor,
|
14
13
|
css = {},
|
15
14
|
}: {
|
16
15
|
icon: React.JSX.Element;
|
@@ -18,7 +17,6 @@ export const LeaveCard = ({
|
|
18
17
|
subtitle: string;
|
19
18
|
onClick: () => void;
|
20
19
|
titleColor: string;
|
21
|
-
subtitleColor: string;
|
22
20
|
bg: string;
|
23
21
|
css?: CSS;
|
24
22
|
}) => {
|
@@ -29,7 +27,7 @@ export const LeaveCard = ({
|
|
29
27
|
<Text variant="lg" css={{ color: titleColor }}>
|
30
28
|
{title}
|
31
29
|
</Text>
|
32
|
-
<Text variant="sm" css={{
|
30
|
+
<Text variant="sm" css={{ c: 'inherit' }}>
|
33
31
|
{subtitle}
|
34
32
|
</Text>
|
35
33
|
</Box>
|
@@ -1,28 +1,40 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import { useNavigate, useParams } from 'react-router-dom';
|
3
2
|
import { useMedia } from 'react-use';
|
4
3
|
import { ConferencingScreen } from '@100mslive/types-prebuilt';
|
5
|
-
import {
|
4
|
+
import {
|
5
|
+
HMSPeer,
|
6
|
+
HMSRole,
|
7
|
+
selectHLSState,
|
8
|
+
selectIsConnectedToRoom,
|
9
|
+
selectPeersByCondition,
|
10
|
+
selectPermissions,
|
11
|
+
selectRolesMap,
|
12
|
+
useHMSActions,
|
13
|
+
useHMSStore,
|
14
|
+
} from '@100mslive/react-sdk';
|
6
15
|
import { config as cssConfig } from '../../../Theme';
|
7
16
|
// @ts-ignore: No implicit Any
|
8
|
-
import { useHMSPrebuiltContext } from '../../AppContext';
|
9
|
-
// @ts-ignore: No implicit Any
|
10
|
-
import { PictureInPicture } from '../PIP/PIPManager';
|
11
17
|
// @ts-ignore: No implicit Any
|
12
18
|
import { ToastManager } from '../Toast/ToastManager';
|
13
19
|
import { DesktopLeaveRoom } from './DesktopLeaveRoom';
|
14
20
|
import { MwebLeaveRoom } from './MwebLeaveRoom';
|
15
|
-
import {
|
21
|
+
import { useRedirectToLeave } from '../hooks/useRedirectToLeave';
|
16
22
|
|
17
23
|
export const LeaveRoom = ({ screenType }: { screenType: keyof ConferencingScreen }) => {
|
18
|
-
const navigate = useNavigate();
|
19
|
-
const params = useParams();
|
20
24
|
const isConnected = useHMSStore(selectIsConnectedToRoom);
|
21
25
|
const permissions = useHMSStore(selectPermissions);
|
22
26
|
const isMobile = useMedia(cssConfig.media.md);
|
27
|
+
const rolesMap: Record<string, HMSRole> = useHMSStore(selectRolesMap);
|
28
|
+
const streamingPermissionRoles = Object.keys(rolesMap).filter(roleName => {
|
29
|
+
const roleObj = rolesMap[roleName];
|
30
|
+
return roleObj.permissions.hlsStreaming;
|
31
|
+
});
|
32
|
+
const peersWithStreamingRights = useHMSStore(
|
33
|
+
selectPeersByCondition((peer: HMSPeer) => streamingPermissionRoles.includes(peer.roleName || '')),
|
34
|
+
);
|
35
|
+
const hlsState = useHMSStore(selectHLSState);
|
23
36
|
const hmsActions = useHMSActions();
|
24
|
-
const {
|
25
|
-
const { isLeaveScreenEnabled } = useRoomLayoutLeaveScreen();
|
37
|
+
const { redirectToLeave } = useRedirectToLeave();
|
26
38
|
|
27
39
|
const stopStream = async () => {
|
28
40
|
try {
|
@@ -35,29 +47,20 @@ export const LeaveRoom = ({ screenType }: { screenType: keyof ConferencingScreen
|
|
35
47
|
}
|
36
48
|
};
|
37
49
|
|
38
|
-
const
|
39
|
-
|
40
|
-
|
41
|
-
navigate(prefix + params.roomId + '/' + params.role);
|
42
|
-
} else {
|
43
|
-
navigate(prefix + params.roomId);
|
50
|
+
const leaveRoom = async ({ endstream = false }) => {
|
51
|
+
if (endstream || (hlsState.running && peersWithStreamingRights.length === 1)) {
|
52
|
+
await stopStream();
|
44
53
|
}
|
45
|
-
PictureInPicture.stop().catch(() => console.error('stopping pip'));
|
46
|
-
ToastManager.clearAllToast();
|
47
|
-
onLeave?.();
|
48
|
-
};
|
49
|
-
|
50
|
-
const leaveRoom = () => {
|
51
54
|
hmsActions.leave();
|
52
|
-
|
55
|
+
redirectToLeave();
|
53
56
|
};
|
54
57
|
|
55
58
|
if (!permissions || !isConnected) {
|
56
59
|
return null;
|
57
60
|
}
|
58
61
|
return isMobile ? (
|
59
|
-
<MwebLeaveRoom leaveRoom={leaveRoom}
|
62
|
+
<MwebLeaveRoom leaveRoom={leaveRoom} screenType={screenType} />
|
60
63
|
) : (
|
61
|
-
<DesktopLeaveRoom leaveRoom={leaveRoom}
|
64
|
+
<DesktopLeaveRoom leaveRoom={leaveRoom} screenType={screenType} />
|
62
65
|
);
|
63
66
|
};
|
@@ -10,7 +10,7 @@ export const LeaveSessionContent = ({
|
|
10
10
|
isModal = false,
|
11
11
|
}: {
|
12
12
|
setShowLeaveRoomAlert: (value: boolean) => void;
|
13
|
-
leaveRoom: () => void;
|
13
|
+
leaveRoom: (args: { endstream: boolean }) => void;
|
14
14
|
isModal?: boolean;
|
15
15
|
}) => {
|
16
16
|
return (
|
@@ -44,7 +44,13 @@ export const LeaveSessionContent = ({
|
|
44
44
|
>
|
45
45
|
Cancel
|
46
46
|
</Button>
|
47
|
-
<Button
|
47
|
+
<Button
|
48
|
+
variant="danger"
|
49
|
+
css={{ w: '100%' }}
|
50
|
+
onClick={() => leaveRoom({ endstream: false })}
|
51
|
+
id="leaveRoom"
|
52
|
+
data-testid="leave_room"
|
53
|
+
>
|
48
54
|
Leave Session
|
49
55
|
</Button>
|
50
56
|
</Flex>
|
@@ -1,6 +1,8 @@
|
|
1
1
|
import React, { Fragment, useState } from 'react';
|
2
2
|
import { ConferencingScreen } from '@100mslive/types-prebuilt';
|
3
|
+
// @ts-ignore: No implicit Any
|
3
4
|
import { selectIsConnectedToRoom, selectPermissions, useHMSStore, useRecordingStreaming } from '@100mslive/react-sdk';
|
5
|
+
// @ts-ignore: No implicit Any
|
4
6
|
import { ExitIcon, StopIcon } from '@100mslive/react-icons';
|
5
7
|
import { Box } from '../../../Layout';
|
6
8
|
import { Sheet } from '../../../Sheet';
|
@@ -14,11 +16,9 @@ import { useDropdownList } from '../hooks/useDropdownList';
|
|
14
16
|
|
15
17
|
export const MwebLeaveRoom = ({
|
16
18
|
leaveRoom,
|
17
|
-
stopStream,
|
18
19
|
screenType,
|
19
20
|
}: {
|
20
|
-
leaveRoom: () => void;
|
21
|
-
stopStream: () => Promise<void>;
|
21
|
+
leaveRoom: (args: { endstream: boolean }) => void;
|
22
22
|
screenType: keyof ConferencingScreen;
|
23
23
|
}) => {
|
24
24
|
const [open, setOpen] = useState(false);
|
@@ -63,10 +63,9 @@ export const MwebLeaveRoom = ({
|
|
63
63
|
} again.`}
|
64
64
|
bg="$surface_default"
|
65
65
|
titleColor="$on_surface_high"
|
66
|
-
subtitleColor="$on_surface_low"
|
67
66
|
icon={<ExitIcon height={24} width={24} style={{ transform: 'rotate(180deg)' }} />}
|
68
|
-
onClick={leaveRoom}
|
69
|
-
css={{ pt: 0, mt: '$10' }}
|
67
|
+
onClick={() => leaveRoom({ endstream: false })}
|
68
|
+
css={{ pt: 0, mt: '$10', color: '$on_surface_low', '&:hover': { color: '$on_surface_high' } }}
|
70
69
|
/>
|
71
70
|
{isStreamingOn && permissions?.hlsStreaming ? (
|
72
71
|
<LeaveCard
|
@@ -76,7 +75,7 @@ export const MwebLeaveRoom = ({
|
|
76
75
|
} for everyone. You can't undo this action.`}
|
77
76
|
bg="$alert_error_dim"
|
78
77
|
titleColor="$alert_error_brighter"
|
79
|
-
|
78
|
+
css={{ color: '$alert_error_bright', '&:hover': { color: '$alert_error_brighter' } }}
|
80
79
|
icon={<StopIcon height={24} width={24} />}
|
81
80
|
onClick={() => {
|
82
81
|
setOpen(false);
|
@@ -93,6 +92,8 @@ export const MwebLeaveRoom = ({
|
|
93
92
|
onClick={() => {
|
94
93
|
if (screenType === 'hls_live_streaming') {
|
95
94
|
setShowLeaveRoomAlert(true);
|
95
|
+
} else {
|
96
|
+
leaveRoom({ endstream: false });
|
96
97
|
}
|
97
98
|
}}
|
98
99
|
>
|
@@ -107,7 +108,6 @@ export const MwebLeaveRoom = ({
|
|
107
108
|
<Sheet.Content css={{ bg: '$surface_dim', p: '$10', pb: '$12' }}>
|
108
109
|
<EndSessionContent
|
109
110
|
setShowEndStreamAlert={setShowEndStreamAlert}
|
110
|
-
stopStream={stopStream}
|
111
111
|
leaveRoom={leaveRoom}
|
112
112
|
isStreamingOn={isStreamingOn}
|
113
113
|
/>
|
@@ -27,6 +27,7 @@ export const ChangeNameContent = ({
|
|
27
27
|
color: '$on_surface_high',
|
28
28
|
fontWeight: '$semiBold',
|
29
29
|
display: 'flex',
|
30
|
+
pb: '$4',
|
30
31
|
'@md': { px: '$8', borderBottom: '1px solid $border_default' },
|
31
32
|
}}
|
32
33
|
>
|
@@ -57,6 +58,9 @@ export const ChangeNameContent = ({
|
|
57
58
|
onKeyDown={async e => {
|
58
59
|
if (e.key === 'Enter' && currentName.trim().length > 0 && currentName !== localPeerName) {
|
59
60
|
e.preventDefault();
|
61
|
+
if (isMobile) {
|
62
|
+
return;
|
63
|
+
}
|
60
64
|
changeName();
|
61
65
|
}
|
62
66
|
}}
|
@@ -20,7 +20,7 @@ export const MoreSettings = ({
|
|
20
20
|
}) => {
|
21
21
|
const isMobile = useMedia(cssConfig.media.md);
|
22
22
|
return isMobile ? (
|
23
|
-
<MwebOptions elements={elements}
|
23
|
+
<MwebOptions elements={elements} screenType={screenType} />
|
24
24
|
) : (
|
25
25
|
<DesktopOptions elements={elements} screenType={screenType} />
|
26
26
|
);
|
@@ -6,7 +6,7 @@ import {
|
|
6
6
|
HLSLiveStreamingScreen_Elements,
|
7
7
|
} from '@100mslive/types-prebuilt';
|
8
8
|
import { selectAppData, selectLocalPeerID, useHMSActions, useHMSStore } from '@100mslive/react-sdk';
|
9
|
-
import { BrbIcon, CheckIcon, DragHandleIcon,
|
9
|
+
import { BrbIcon, CheckIcon, DragHandleIcon, InfoIcon, PipIcon, SettingsIcon } from '@100mslive/react-icons';
|
10
10
|
import { Checkbox, Dropdown, Flex, Text, Tooltip } from '../../../..';
|
11
11
|
// @ts-ignore: No implicit any
|
12
12
|
import IconButton from '../../../IconButton';
|
@@ -58,7 +58,7 @@ export const DesktopOptions = ({
|
|
58
58
|
const hmsActions = useHMSActions();
|
59
59
|
const enablHlsStats = useHMSStore(selectAppData(APP_DATA.hlsStats));
|
60
60
|
const [openModals, setOpenModals] = useState(new Set());
|
61
|
-
const {
|
61
|
+
const { isBRBOn, toggleBRB } = useMyMetadata();
|
62
62
|
const isPipOn = PictureInPicture.isOn();
|
63
63
|
const isBRBEnabled = !!elements?.brb;
|
64
64
|
|
@@ -85,13 +85,13 @@ export const DesktopOptions = ({
|
|
85
85
|
onOpenChange={value => updateState(MODALS.MORE_SETTINGS, value)}
|
86
86
|
modal={false}
|
87
87
|
>
|
88
|
-
<
|
89
|
-
<
|
90
|
-
<
|
88
|
+
<Tooltip title="More options">
|
89
|
+
<Dropdown.Trigger asChild data-testid="more_settings_btn">
|
90
|
+
<IconButton>
|
91
91
|
<DragHandleIcon />
|
92
|
-
</
|
93
|
-
</
|
94
|
-
</
|
92
|
+
</IconButton>
|
93
|
+
</Dropdown.Trigger>
|
94
|
+
</Tooltip>
|
95
95
|
|
96
96
|
<Dropdown.Content
|
97
97
|
sideOffset={5}
|
@@ -105,19 +105,7 @@ export const DesktopOptions = ({
|
|
105
105
|
},
|
106
106
|
}}
|
107
107
|
>
|
108
|
-
{screenType !== 'hls_live_streaming' ? (
|
109
|
-
<Dropdown.Item onClick={toggleHandRaise} data-testid="raise_hand_btn">
|
110
|
-
<HandIcon />
|
111
|
-
<Text variant="sm" css={{ ml: '$4', color: '$on_surface_high' }}>
|
112
|
-
Raise Hand
|
113
|
-
</Text>
|
114
|
-
<Flex justify="end" css={{ color: '$on_surface_high', flexGrow: '1' }}>
|
115
|
-
{isHandRaised ? <CheckIcon /> : null}
|
116
|
-
</Flex>
|
117
|
-
</Dropdown.Item>
|
118
|
-
) : null}
|
119
|
-
|
120
|
-
{isBRBEnabled && screenType === 'hls_live_streaming' ? (
|
108
|
+
{isBRBEnabled && screenType !== 'hls_live_streaming' ? (
|
121
109
|
<Dropdown.Item onClick={toggleBRB} data-testid="brb_btn">
|
122
110
|
<BrbIcon />
|
123
111
|
<Text variant="sm" css={{ ml: '$4', color: '$on_surface_high' }}>
|
@@ -129,8 +117,6 @@ export const DesktopOptions = ({
|
|
129
117
|
</Dropdown.Item>
|
130
118
|
) : null}
|
131
119
|
|
132
|
-
{isBRBEnabled && screenType === 'hls_live_streaming' ? <Dropdown.ItemSeparator css={{ mx: '0' }} /> : null}
|
133
|
-
|
134
120
|
{screenType !== 'hls_live_streaming' ? (
|
135
121
|
<Dropdown.Item>
|
136
122
|
<PIP
|
package/src/Prebuilt/components/MoreSettings/SplitComponents/{MwebOptions.jsx → MwebOptions.tsx}
RENAMED
@@ -1,5 +1,6 @@
|
|
1
1
|
import React, { useRef, useState } from 'react';
|
2
2
|
import { useClickAway } from 'react-use';
|
3
|
+
import { ConferencingScreen, DefaultConferencingScreen_Elements } from '@100mslive/types-prebuilt';
|
3
4
|
import {
|
4
5
|
selectIsConnectedToRoom,
|
5
6
|
selectPeerCount,
|
@@ -8,20 +9,44 @@ import {
|
|
8
9
|
useHMSStore,
|
9
10
|
useRecordingStreaming,
|
10
11
|
} from '@100mslive/react-sdk';
|
11
|
-
import {
|
12
|
-
|
12
|
+
import {
|
13
|
+
BrbIcon,
|
14
|
+
CrossIcon,
|
15
|
+
DragHandleIcon,
|
16
|
+
EmojiIcon,
|
17
|
+
HandIcon,
|
18
|
+
HandRaiseSlashedIcon,
|
19
|
+
PeopleIcon,
|
20
|
+
RecordIcon,
|
21
|
+
SettingsIcon,
|
22
|
+
} from '@100mslive/react-icons';
|
23
|
+
import { Box, Loading, Tooltip } from '../../../..';
|
13
24
|
import { Sheet } from '../../../../Sheet';
|
25
|
+
// @ts-ignore: No implicit any
|
14
26
|
import IconButton from '../../../IconButton';
|
27
|
+
// @ts-ignore: No implicit any
|
15
28
|
import { EmojiReaction } from '../../EmojiReaction';
|
29
|
+
// @ts-ignore: No implicit any
|
16
30
|
import { StopRecordingInSheet } from '../../Header/StreamActions';
|
31
|
+
// @ts-ignore: No implicit any
|
17
32
|
import SettingsModal from '../../Settings/SettingsModal';
|
33
|
+
// @ts-ignore: No implicit any
|
18
34
|
import { ToastManager } from '../../Toast/ToastManager';
|
19
|
-
|
20
|
-
import {
|
21
|
-
|
35
|
+
// @ts-ignore: No implicit any
|
36
|
+
import { ActionTile } from '../ActionTile';
|
37
|
+
// @ts-ignore: No implicit any
|
38
|
+
import { ChangeNameModal } from '../ChangeNameModal';
|
39
|
+
// @ts-ignore: No implicit any
|
40
|
+
import { MuteAllModal } from '../MuteAllModal';
|
41
|
+
// @ts-ignore: No implicit any
|
22
42
|
import { useSidepaneToggle } from '../../AppData/useSidepane';
|
43
|
+
// @ts-ignore: No implicit any
|
23
44
|
import { useDropdownList } from '../../hooks/useDropdownList';
|
45
|
+
// @ts-ignore: No implicit any
|
46
|
+
import { useMyMetadata } from '../../hooks/useMetadata';
|
47
|
+
// @ts-ignore: No implicit any
|
24
48
|
import { getFormattedCount } from '../../../common/utils';
|
49
|
+
// @ts-ignore: No implicit any
|
25
50
|
import { SIDE_PANE_OPTIONS } from '../../../common/constants';
|
26
51
|
|
27
52
|
// const VirtualBackground = React.lazy(() => import('../../../plugins/VirtualBackground/VirtualBackground'));
|
@@ -38,14 +63,18 @@ const MODALS = {
|
|
38
63
|
EMBED_URL: 'embedUrl',
|
39
64
|
};
|
40
65
|
|
41
|
-
export const MwebOptions = ({
|
66
|
+
export const MwebOptions = ({
|
67
|
+
elements,
|
68
|
+
screenType,
|
69
|
+
}: {
|
70
|
+
elements: DefaultConferencingScreen_Elements;
|
71
|
+
screenType: keyof ConferencingScreen;
|
72
|
+
}) => {
|
42
73
|
const hmsActions = useHMSActions();
|
43
74
|
const permissions = useHMSStore(selectPermissions);
|
44
75
|
const isConnected = useHMSStore(selectIsConnectedToRoom);
|
45
76
|
const { isBrowserRecordingOn, isStreamingOn, isHLSRunning } = useRecordingStreaming();
|
46
|
-
|
47
77
|
const [openModals, setOpenModals] = useState(new Set());
|
48
|
-
|
49
78
|
const [openOptionsSheet, setOpenOptionsSheet] = useState(false);
|
50
79
|
const [openSettingsSheet, setOpenSettingsSheet] = useState(false);
|
51
80
|
const [showEmojiCard, setShowEmojiCard] = useState(false);
|
@@ -54,11 +83,12 @@ export const MwebOptions = ({ elements }) => {
|
|
54
83
|
const toggleParticipants = useSidepaneToggle(SIDE_PANE_OPTIONS.PARTICIPANTS);
|
55
84
|
const peerCount = useHMSStore(selectPeerCount);
|
56
85
|
const emojiCardRef = useRef(null);
|
86
|
+
const { isBRBOn, toggleBRB, isHandRaised, toggleHandRaise } = useMyMetadata();
|
57
87
|
// const isVideoOn = useHMSStore(selectIsLocalVideoEnabled);
|
58
88
|
|
59
89
|
useDropdownList({ open: openModals.size > 0 || openOptionsSheet || openSettingsSheet, name: 'MoreSettings' });
|
60
90
|
|
61
|
-
const updateState = (modalName, value) => {
|
91
|
+
const updateState = (modalName: string, value: boolean) => {
|
62
92
|
setOpenModals(modals => {
|
63
93
|
const copy = new Set(modals);
|
64
94
|
if (value) {
|
@@ -75,13 +105,13 @@ export const MwebOptions = ({ elements }) => {
|
|
75
105
|
return (
|
76
106
|
<>
|
77
107
|
<Sheet.Root open={openOptionsSheet} onOpenChange={setOpenOptionsSheet}>
|
78
|
-
<
|
79
|
-
<
|
80
|
-
<
|
108
|
+
<Tooltip title="More options">
|
109
|
+
<Sheet.Trigger asChild data-testid="more_settings_btn">
|
110
|
+
<IconButton>
|
81
111
|
<DragHandleIcon />
|
82
|
-
</
|
83
|
-
</
|
84
|
-
</
|
112
|
+
</IconButton>
|
113
|
+
</Sheet.Trigger>
|
114
|
+
</Tooltip>
|
85
115
|
<Sheet.Content css={{ bg: '$surface_dim', pb: '$14' }}>
|
86
116
|
<Sheet.Title
|
87
117
|
css={{
|
@@ -115,16 +145,31 @@ export const MwebOptions = ({ elements }) => {
|
|
115
145
|
px: '$9',
|
116
146
|
}}
|
117
147
|
>
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
148
|
+
{elements?.participant_list && (
|
149
|
+
<ActionTile.Root
|
150
|
+
onClick={() => {
|
151
|
+
toggleParticipants();
|
152
|
+
setOpenOptionsSheet(false);
|
153
|
+
}}
|
154
|
+
>
|
155
|
+
<ActionTile.Count>{getFormattedCount(peerCount)}</ActionTile.Count>
|
156
|
+
<PeopleIcon />
|
157
|
+
<ActionTile.Title>Participants</ActionTile.Title>
|
158
|
+
</ActionTile.Root>
|
159
|
+
)}
|
160
|
+
|
161
|
+
{screenType !== 'hls_live_streaming' ? (
|
162
|
+
<ActionTile.Root
|
163
|
+
active={isHandRaised}
|
164
|
+
onClick={() => {
|
165
|
+
toggleHandRaise();
|
166
|
+
setOpenOptionsSheet(false);
|
167
|
+
}}
|
168
|
+
>
|
169
|
+
{isHandRaised ? <HandRaiseSlashedIcon /> : <HandIcon />}
|
170
|
+
<ActionTile.Title>{isHandRaised ? 'Lower' : 'Raise'} Hand</ActionTile.Title>
|
171
|
+
</ActionTile.Root>
|
172
|
+
) : null}
|
128
173
|
|
129
174
|
{/* {isVideoOn ? (
|
130
175
|
<Suspense fallback="">
|
@@ -144,6 +189,19 @@ export const MwebOptions = ({ elements }) => {
|
|
144
189
|
</ActionTile.Root>
|
145
190
|
)}
|
146
191
|
|
192
|
+
{elements?.brb && (
|
193
|
+
<ActionTile.Root
|
194
|
+
active={isBRBOn}
|
195
|
+
onClick={() => {
|
196
|
+
toggleBRB();
|
197
|
+
setOpenOptionsSheet(false);
|
198
|
+
}}
|
199
|
+
>
|
200
|
+
<BrbIcon />
|
201
|
+
<ActionTile.Title>Be Right Back</ActionTile.Title>
|
202
|
+
</ActionTile.Root>
|
203
|
+
)}
|
204
|
+
|
147
205
|
<ActionTile.Root
|
148
206
|
onClick={() => {
|
149
207
|
setOpenSettingsSheet(true);
|
@@ -174,6 +232,7 @@ export const MwebOptions = ({ elements }) => {
|
|
174
232
|
setOpenOptionsSheet(false);
|
175
233
|
setIsRecordingLoading(false);
|
176
234
|
} catch (error) {
|
235
|
+
// @ts-ignore
|
177
236
|
if (error.message.includes('stream already running')) {
|
178
237
|
ToastManager.addToast({
|
179
238
|
title: 'Recording already running',
|
@@ -181,6 +240,7 @@ export const MwebOptions = ({ elements }) => {
|
|
181
240
|
});
|
182
241
|
} else {
|
183
242
|
ToastManager.addToast({
|
243
|
+
// @ts-ignore
|
184
244
|
title: error.message,
|
185
245
|
variant: 'error',
|
186
246
|
});
|
@@ -208,11 +268,11 @@ export const MwebOptions = ({ elements }) => {
|
|
208
268
|
</Sheet.Root>
|
209
269
|
<SettingsModal open={openSettingsSheet} onOpenChange={setOpenSettingsSheet} />
|
210
270
|
{openModals.has(MODALS.MUTE_ALL) && (
|
211
|
-
<MuteAllModal onOpenChange={value => updateState(MODALS.MUTE_ALL, value)} isMobile />
|
271
|
+
<MuteAllModal onOpenChange={(value: boolean) => updateState(MODALS.MUTE_ALL, value)} isMobile />
|
212
272
|
)}
|
213
273
|
{openModals.has(MODALS.CHANGE_NAME) && (
|
214
274
|
<ChangeNameModal
|
215
|
-
onOpenChange={value => updateState(MODALS.CHANGE_NAME, value)}
|
275
|
+
onOpenChange={(value: boolean) => updateState(MODALS.CHANGE_NAME, value)}
|
216
276
|
openParentSheet={() => setOpenOptionsSheet(true)}
|
217
277
|
/>
|
218
278
|
)}
|
@@ -248,6 +308,7 @@ export const MwebOptions = ({ elements }) => {
|
|
248
308
|
setShowRecordingOn(false);
|
249
309
|
} catch (error) {
|
250
310
|
ToastManager.addToast({
|
311
|
+
// @ts-ignore
|
251
312
|
title: error.message,
|
252
313
|
variant: 'error',
|
253
314
|
});
|