@100mslive/roomkit-react 0.1.6-alpha.0 → 0.1.6-alpha.1
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-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
|
});
|