@100mslive/roomkit-react 0.1.6-alpha.1 → 0.1.6-alpha.3
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-HNVYG5VE.js → HLSView-HL455FYH.js} +3 -3
- package/dist/Prebuilt/components/Footer/ChatToggle.d.ts +1 -3
- package/dist/Prebuilt/components/Leave/DesktopLeaveRoom.d.ts +2 -1
- package/dist/Prebuilt/components/Leave/MwebLeaveRoom.d.ts +2 -1
- package/dist/Prebuilt/components/SidePaneTabs.d.ts +7 -0
- package/dist/{VirtualBackground-UM2FOUHQ.js → VirtualBackground-6EP3X7MO.js} +6 -6
- package/dist/VirtualBackground-6EP3X7MO.js.map +7 -0
- package/dist/{chunk-LYSAET4G.js → chunk-6JF3GAOH.js} +109 -127
- package/dist/chunk-6JF3GAOH.js.map +7 -0
- package/dist/{chunk-POE7H4IE.js → chunk-KAJJ56J4.js} +2 -2
- package/dist/{chunk-POE7H4IE.js.map → chunk-KAJJ56J4.js.map} +1 -1
- package/dist/{chunk-364HP22I.js → chunk-UXBTLGWY.js} +2 -2
- package/dist/{conference-UWLJHMB2.js → conference-MPZNWHV5.js} +472 -415
- package/dist/conference-MPZNWHV5.js.map +7 -0
- package/dist/index.cjs.js +714 -678
- package/dist/index.cjs.js.map +4 -4
- package/dist/index.js +2 -2
- package/dist/meta.cjs.json +153 -153
- package/dist/meta.esbuild.json +185 -184
- package/package.json +6 -6
- package/src/Button/Button.tsx +6 -6
- package/src/Prebuilt/components/Chat/Chat.jsx +3 -9
- package/src/Prebuilt/components/Chat/useEmojiPickerStyles.js +1 -0
- package/src/Prebuilt/components/Footer/ChatToggle.tsx +2 -9
- package/src/Prebuilt/components/Footer/Footer.tsx +23 -7
- package/src/Prebuilt/components/Footer/ParticipantList.jsx +4 -5
- package/src/Prebuilt/components/Footer/RoleAccordion.tsx +1 -1
- package/src/Prebuilt/components/Header/HeaderComponents.jsx +10 -9
- package/src/Prebuilt/components/InsetTile.tsx +1 -0
- package/src/Prebuilt/components/Leave/DesktopLeaveRoom.tsx +7 -9
- package/src/Prebuilt/components/Leave/LeaveRoom.tsx +6 -2
- package/src/Prebuilt/components/Leave/MwebLeaveRoom.tsx +7 -4
- package/src/Prebuilt/components/MoreSettings/SplitComponents/MwebOptions.tsx +1 -1
- package/src/Prebuilt/components/Notifications/Notifications.jsx +4 -3
- package/src/Prebuilt/components/Preview/PreviewJoin.tsx +2 -3
- package/src/Prebuilt/components/RoleChangeRequestModal.tsx +4 -3
- package/src/Prebuilt/components/ScreenshareTile.jsx +15 -7
- package/src/Prebuilt/components/SidePaneTabs.tsx +141 -0
- package/src/Prebuilt/components/conference.jsx +9 -1
- package/src/Prebuilt/components/hooks/useMetadata.jsx +7 -25
- package/src/Prebuilt/layouts/SidePane.tsx +12 -10
- package/src/Prebuilt/plugins/VirtualBackground/VirtualBackground.jsx +3 -3
- package/src/Prebuilt/provider/roomLayoutProvider/hooks/useFetchRoomLayout.ts +2 -2
- package/dist/VirtualBackground-UM2FOUHQ.js.map +0 -7
- package/dist/chunk-LYSAET4G.js.map +0 -7
- package/dist/conference-UWLJHMB2.js.map +0 -7
- package/src/Prebuilt/components/Chat/ChatParticipantHeader.jsx +0 -84
- /package/dist/{HLSView-HNVYG5VE.js.map → HLSView-HL455FYH.js.map} +0 -0
- /package/dist/{chunk-364HP22I.js.map → chunk-UXBTLGWY.js.map} +0 -0
package/package.json
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
"prebuilt",
|
11
11
|
"roomkit"
|
12
12
|
],
|
13
|
-
"version": "0.1.6-alpha.
|
13
|
+
"version": "0.1.6-alpha.3",
|
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.15-alpha.
|
80
|
-
"@100mslive/hms-virtual-background": "1.11.15-alpha.
|
81
|
-
"@100mslive/react-icons": "0.8.15-alpha.
|
82
|
-
"@100mslive/react-sdk": "0.8.15-alpha.
|
79
|
+
"@100mslive/hls-player": "0.1.15-alpha.3",
|
80
|
+
"@100mslive/hms-virtual-background": "1.11.15-alpha.3",
|
81
|
+
"@100mslive/react-icons": "0.8.15-alpha.3",
|
82
|
+
"@100mslive/react-sdk": "0.8.15-alpha.3",
|
83
83
|
"@100mslive/types-prebuilt": "0.12.0",
|
84
84
|
"@emoji-mart/data": "^1.0.6",
|
85
85
|
"@emoji-mart/react": "^1.0.1",
|
@@ -115,5 +115,5 @@
|
|
115
115
|
"uuid": "^8.3.2",
|
116
116
|
"worker-timers": "^7.0.40"
|
117
117
|
},
|
118
|
-
"gitHead": "
|
118
|
+
"gitHead": "1724f0ddfffa3cd09487ab41c065c426c70c2bc3"
|
119
119
|
}
|
package/src/Button/Button.tsx
CHANGED
@@ -139,12 +139,12 @@ const StyledButton = styled('button', {
|
|
139
139
|
variants: {
|
140
140
|
variant: {
|
141
141
|
standard: getButtonVariants(
|
142
|
-
'$
|
143
|
-
'$
|
144
|
-
'$
|
145
|
-
'$
|
146
|
-
'$
|
147
|
-
'$
|
142
|
+
'$surface_brighter',
|
143
|
+
'$surface_bright',
|
144
|
+
'$surface_default',
|
145
|
+
'$surface_dim',
|
146
|
+
'$on_surface_high',
|
147
|
+
'$on_surface_low',
|
148
148
|
),
|
149
149
|
danger: getButtonVariants(
|
150
150
|
'$alert_error_default',
|
@@ -17,7 +17,6 @@ import { Text } from '../../../Text';
|
|
17
17
|
import { config as cssConfig } from '../../../Theme';
|
18
18
|
import { AnnotisedMessage, ChatBody } from './ChatBody';
|
19
19
|
import { ChatFooter } from './ChatFooter';
|
20
|
-
import { ChatParticipantHeader } from './ChatParticipantHeader';
|
21
20
|
import { useRoomLayoutConferencingScreen } from '../../provider/roomLayoutProvider/hooks/useRoomLayoutScreen';
|
22
21
|
import { useSetSubscribedChatSelector } from '../AppData/useUISettings';
|
23
22
|
import { useSetPinnedMessage } from '../hooks/useSetPinnedMessage';
|
@@ -67,7 +66,7 @@ const PinnedMessage = ({ clearPinnedMessage }) => {
|
|
67
66
|
) : null;
|
68
67
|
};
|
69
68
|
|
70
|
-
export const Chat = ({ screenType
|
69
|
+
export const Chat = ({ screenType }) => {
|
71
70
|
const notification = useHMSNotifications(HMSNotificationTypes.PEER_LEFT);
|
72
71
|
const [peerSelector, setPeerSelector] = useSetSubscribedChatSelector(CHAT_SELECTOR.PEER_ID);
|
73
72
|
const [roleSelector, setRoleSelector] = useSetSubscribedChatSelector(CHAT_SELECTOR.ROLE);
|
@@ -77,7 +76,7 @@ export const Chat = ({ screenType, hideControls = false }) => {
|
|
77
76
|
peerId: peerSelector && peerName ? peerSelector : '',
|
78
77
|
selection: roleSelector ? roleSelector : peerSelector && peerName ? peerName : 'Everyone',
|
79
78
|
});
|
80
|
-
const [isSelectorOpen
|
79
|
+
const [isSelectorOpen] = useState(false);
|
81
80
|
const listRef = useRef(null);
|
82
81
|
const hmsActions = useHMSActions();
|
83
82
|
const { setPinnedMessage } = useSetPinnedMessage();
|
@@ -123,15 +122,10 @@ export const Chat = ({ screenType, hideControls = false }) => {
|
|
123
122
|
css={{
|
124
123
|
size: '100%',
|
125
124
|
gap: '$4',
|
126
|
-
marginTop: hideControls && elements?.chat?.is_overlay ? '$17' : '0',
|
127
|
-
transition: 'margin 0.3s ease-in-out',
|
128
125
|
}}
|
129
126
|
>
|
130
127
|
{isMobile && elements?.chat?.is_overlay ? null : (
|
131
|
-
<>
|
132
|
-
<ChatParticipantHeader selectorOpen={isSelectorOpen} onToggle={() => setSelectorOpen(value => !value)} />
|
133
|
-
{elements?.chat?.allow_pinning_messages ? <PinnedMessage clearPinnedMessage={setPinnedMessage} /> : null}
|
134
|
-
</>
|
128
|
+
<>{elements?.chat?.allow_pinning_messages ? <PinnedMessage clearPinnedMessage={setPinnedMessage} /> : null}</>
|
135
129
|
)}
|
136
130
|
|
137
131
|
<ChatBody
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React
|
1
|
+
import React from 'react';
|
2
2
|
import { selectUnreadHMSMessagesCount, useHMSStore } from '@100mslive/react-sdk';
|
3
3
|
import { ChatIcon, ChatUnreadIcon } from '@100mslive/react-icons';
|
4
4
|
import { Tooltip } from '../../..';
|
@@ -9,18 +9,11 @@ import { useIsSidepaneTypeOpen, useSidepaneToggle } from '../AppData/useSidepane
|
|
9
9
|
// @ts-ignore: No implicit Any
|
10
10
|
import { SIDE_PANE_OPTIONS } from '../../common/constants';
|
11
11
|
|
12
|
-
export const ChatToggle = (
|
12
|
+
export const ChatToggle = () => {
|
13
13
|
const countUnreadMessages = useHMSStore(selectUnreadHMSMessagesCount);
|
14
14
|
const isChatOpen = useIsSidepaneTypeOpen(SIDE_PANE_OPTIONS.CHAT);
|
15
15
|
const toggleChat = useSidepaneToggle(SIDE_PANE_OPTIONS.CHAT);
|
16
16
|
|
17
|
-
useEffect(() => {
|
18
|
-
if (!isChatOpen && openByDefault) {
|
19
|
-
toggleChat();
|
20
|
-
}
|
21
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
22
|
-
}, [toggleChat, openByDefault]);
|
23
|
-
|
24
17
|
return (
|
25
18
|
<Tooltip key="chat" title={`${isChatOpen ? 'Close' : 'Open'} chat`}>
|
26
19
|
<IconButton onClick={toggleChat} active={!isChatOpen} data-testid="chat_btn">
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React, { Suspense } from 'react';
|
1
|
+
import React, { Suspense, useEffect } from 'react';
|
2
2
|
import { useMedia } from 'react-use';
|
3
3
|
import {
|
4
4
|
ConferencingScreen,
|
@@ -6,7 +6,6 @@ import {
|
|
6
6
|
HLSLiveStreamingScreen_Elements,
|
7
7
|
} from '@100mslive/types-prebuilt';
|
8
8
|
import { Chat_ChatState } from '@100mslive/types-prebuilt/elements/chat';
|
9
|
-
import { selectIsLocalVideoEnabled, useHMSStore } from '@100mslive/react-sdk';
|
10
9
|
import { config as cssConfig, Footer as AppFooter } from '../../..';
|
11
10
|
// @ts-ignore: No implicit Any
|
12
11
|
import { AudioVideoToggle } from '../AudioVideoToggle';
|
@@ -25,6 +24,10 @@ import { ChatToggle } from './ChatToggle';
|
|
25
24
|
// @ts-ignore: No implicit Any
|
26
25
|
import { ParticipantCount } from './ParticipantList';
|
27
26
|
// @ts-ignore: No implicit Any
|
27
|
+
import { useIsSidepaneTypeOpen, useSidepaneToggle } from '../AppData/useSidepane';
|
28
|
+
// @ts-ignore: No implicit Any
|
29
|
+
import { SIDE_PANE_OPTIONS } from '../../common/constants';
|
30
|
+
// @ts-ignore: No implicit Any
|
28
31
|
const VirtualBackground = React.lazy(() => import('../../plugins/VirtualBackground/VirtualBackground'));
|
29
32
|
|
30
33
|
export const Footer = ({
|
@@ -37,7 +40,16 @@ export const Footer = ({
|
|
37
40
|
const isMobile = useMedia(cssConfig.media.md);
|
38
41
|
const isOverlayChat = !!elements?.chat?.is_overlay;
|
39
42
|
const openByDefault = elements?.chat?.initial_state === Chat_ChatState.CHAT_STATE_OPEN;
|
40
|
-
|
43
|
+
|
44
|
+
const isChatOpen = useIsSidepaneTypeOpen(SIDE_PANE_OPTIONS.CHAT);
|
45
|
+
const toggleChat = useSidepaneToggle(SIDE_PANE_OPTIONS.CHAT);
|
46
|
+
|
47
|
+
useEffect(() => {
|
48
|
+
if (!isChatOpen && openByDefault) {
|
49
|
+
toggleChat();
|
50
|
+
}
|
51
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
52
|
+
}, [toggleChat, openByDefault]);
|
41
53
|
|
42
54
|
return (
|
43
55
|
<AppFooter.Root
|
@@ -48,7 +60,7 @@ export const Footer = ({
|
|
48
60
|
gap: '$10',
|
49
61
|
position: 'relative',
|
50
62
|
// To prevent it from showing over the sidepane if chat type is not overlay
|
51
|
-
zIndex: isOverlayChat ? 20 : 1,
|
63
|
+
zIndex: isOverlayChat && isChatOpen ? 20 : 1,
|
52
64
|
},
|
53
65
|
}}
|
54
66
|
>
|
@@ -63,7 +75,11 @@ export const Footer = ({
|
|
63
75
|
>
|
64
76
|
{isMobile ? <LeaveRoom screenType={screenType} /> : null}
|
65
77
|
<AudioVideoToggle />
|
66
|
-
{isMobile ? null :
|
78
|
+
{isMobile ? null : (
|
79
|
+
<Suspense fallback={<></>}>
|
80
|
+
<VirtualBackground />
|
81
|
+
</Suspense>
|
82
|
+
)}
|
67
83
|
</AppFooter.Left>
|
68
84
|
<AppFooter.Center
|
69
85
|
css={{
|
@@ -76,7 +92,7 @@ export const Footer = ({
|
|
76
92
|
{isMobile ? (
|
77
93
|
<>
|
78
94
|
{screenType === 'hls_live_streaming' ? <RaiseHand /> : null}
|
79
|
-
{elements?.chat && <ChatToggle
|
95
|
+
{elements?.chat && <ChatToggle />}
|
80
96
|
<MoreSettings elements={elements} screenType={screenType} />
|
81
97
|
</>
|
82
98
|
) : (
|
@@ -89,7 +105,7 @@ export const Footer = ({
|
|
89
105
|
)}
|
90
106
|
</AppFooter.Center>
|
91
107
|
<AppFooter.Right>
|
92
|
-
{!isMobile && elements?.chat && <ChatToggle
|
108
|
+
{!isMobile && elements?.chat && <ChatToggle />}
|
93
109
|
{elements?.participant_list && <ParticipantCount />}
|
94
110
|
<MoreSettings elements={elements} screenType={screenType} />
|
95
111
|
</AppFooter.Right>
|
@@ -21,7 +21,6 @@ import {
|
|
21
21
|
} from '@100mslive/react-icons';
|
22
22
|
import { Box, config as cssConfig, Dropdown, Flex, Input, Text, textEllipsis } from '../../..';
|
23
23
|
import IconButton from '../../IconButton';
|
24
|
-
import { ChatParticipantHeader } from '../Chat/ChatParticipantHeader';
|
25
24
|
import { ConnectionIndicator } from '../Connection/ConnectionIndicator';
|
26
25
|
import { ToastManager } from '../Toast/ToastManager';
|
27
26
|
import { RoleAccordion } from './RoleAccordion';
|
@@ -61,7 +60,6 @@ export const ParticipantList = () => {
|
|
61
60
|
return (
|
62
61
|
<Fragment>
|
63
62
|
<Flex direction="column" css={{ size: '100%', gap: '$4' }}>
|
64
|
-
<ChatParticipantHeader activeTabValue={SIDE_PANE_OPTIONS.PARTICIPANTS} />
|
65
63
|
{!filter?.search && participants.length === 0 ? null : <ParticipantSearch onSearch={onSearch} inSidePane />}
|
66
64
|
{participants.length === 0 ? (
|
67
65
|
<Flex align="center" justify="center" css={{ w: '100%', p: '$8 0' }}>
|
@@ -121,10 +119,11 @@ const VirtualizedParticipants = ({ peersOrderedByRoles = {}, isConnected, filter
|
|
121
119
|
direction="column"
|
122
120
|
css={{
|
123
121
|
gap: '$8',
|
124
|
-
maxHeight: '100%',
|
125
122
|
overflowY: 'auto',
|
126
123
|
overflowX: 'hidden',
|
127
|
-
pr: '$
|
124
|
+
pr: '$10',
|
125
|
+
mr: '-$10',
|
126
|
+
flex: '1 1 0',
|
128
127
|
}}
|
129
128
|
>
|
130
129
|
<RoleAccordion
|
@@ -318,7 +317,7 @@ export const ParticipantSearch = ({ onSearch, placeholder, inSidePane = false })
|
|
318
317
|
<Flex
|
319
318
|
align="center"
|
320
319
|
css={{
|
321
|
-
p: isMobile ? '
|
320
|
+
p: isMobile ? '0' : '$2 0',
|
322
321
|
mb: '$2',
|
323
322
|
position: 'relative',
|
324
323
|
color: '$on_surface_medium',
|
@@ -46,7 +46,7 @@ export const RoleAccordion = ({
|
|
46
46
|
const height = ROW_HEIGHT * peerList.length;
|
47
47
|
|
48
48
|
return (
|
49
|
-
<Flex direction="column" css={{
|
49
|
+
<Flex direction="column" css={{ '&:hover .role_actions': { visibility: 'visible' } }} ref={ref}>
|
50
50
|
<Accordion.Root
|
51
51
|
type="single"
|
52
52
|
collapsible
|
@@ -1,8 +1,7 @@
|
|
1
|
-
import React, { useState } from 'react';
|
2
|
-
import {
|
3
|
-
import { selectDominantSpeaker, selectIsConnectedToRoom, useHMSStore } from '@100mslive/react-sdk';
|
1
|
+
import React, { useEffect, useState } from 'react';
|
2
|
+
import { selectDominantSpeaker, useHMSStore } from '@100mslive/react-sdk';
|
4
3
|
import { VolumeOneIcon } from '@100mslive/react-icons';
|
5
|
-
import {
|
4
|
+
import { Flex, styled, Text, textEllipsis, VerticalDivider } from '../../../';
|
6
5
|
import { useRoomLayout } from '../../provider/roomLayoutProvider';
|
7
6
|
|
8
7
|
export const SpeakerTag = () => {
|
@@ -37,13 +36,15 @@ const LogoImg = styled('img', {
|
|
37
36
|
export const Logo = () => {
|
38
37
|
const roomLayout = useRoomLayout();
|
39
38
|
const logo = roomLayout?.logo?.url;
|
40
|
-
const isMobile = useMedia(cssConfig.media.md);
|
41
|
-
const isConnected = useHMSStore(selectIsConnectedToRoom);
|
42
39
|
const [hideImage, setHideImage] = useState(false);
|
43
40
|
// Hide logo for now as there is not enough space
|
44
|
-
|
45
|
-
|
46
|
-
|
41
|
+
useEffect(() => {
|
42
|
+
if (hideImage) {
|
43
|
+
setHideImage(false);
|
44
|
+
}
|
45
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
46
|
+
}, [logo]);
|
47
|
+
|
47
48
|
return logo && !hideImage ? (
|
48
49
|
<LogoImg
|
49
50
|
src={logo}
|
@@ -16,9 +16,11 @@ import { useDropdownList } from '../hooks/useDropdownList';
|
|
16
16
|
export const DesktopLeaveRoom = ({
|
17
17
|
leaveRoom,
|
18
18
|
screenType,
|
19
|
+
endRoom,
|
19
20
|
}: {
|
20
21
|
leaveRoom: (args: { endstream: boolean }) => void;
|
21
22
|
screenType: keyof ConferencingScreen;
|
23
|
+
endRoom: () => void;
|
22
24
|
}) => {
|
23
25
|
const [open, setOpen] = useState(false);
|
24
26
|
const [showLeaveRoomAlert, setShowLeaveRoomAlert] = useState(false);
|
@@ -26,7 +28,7 @@ export const DesktopLeaveRoom = ({
|
|
26
28
|
const isConnected = useHMSStore(selectIsConnectedToRoom);
|
27
29
|
const permissions = useHMSStore(selectPermissions);
|
28
30
|
const { isStreamingOn } = useRecordingStreaming();
|
29
|
-
const showStream =
|
31
|
+
const showStream = screenType !== 'hls_live_streaming' && isStreamingOn;
|
30
32
|
|
31
33
|
useDropdownList({ open: open || showEndStreamAlert || showLeaveRoomAlert, name: 'LeaveRoom' });
|
32
34
|
|
@@ -36,7 +38,7 @@ export const DesktopLeaveRoom = ({
|
|
36
38
|
|
37
39
|
return (
|
38
40
|
<Fragment>
|
39
|
-
{permissions
|
41
|
+
{screenType !== 'hls_live_streaming' && (permissions?.hlsStreaming || permissions?.endRoom) ? (
|
40
42
|
<Flex>
|
41
43
|
<LeaveIconButton
|
42
44
|
key="LeaveRoom"
|
@@ -46,11 +48,7 @@ export const DesktopLeaveRoom = ({
|
|
46
48
|
borderBottomRightRadius: 0,
|
47
49
|
}}
|
48
50
|
onClick={() => {
|
49
|
-
|
50
|
-
setShowLeaveRoomAlert(true);
|
51
|
-
} else {
|
52
|
-
leaveRoom({ endstream: false });
|
53
|
-
}
|
51
|
+
leaveRoom({ endstream: false });
|
54
52
|
}}
|
55
53
|
>
|
56
54
|
<Tooltip title="Leave Room">
|
@@ -94,7 +92,7 @@ export const DesktopLeaveRoom = ({
|
|
94
92
|
css={{ p: 0 }}
|
95
93
|
/>
|
96
94
|
</Dropdown.Item>
|
97
|
-
{
|
95
|
+
{permissions?.endRoom || permissions?.hlsStreaming ? (
|
98
96
|
<Dropdown.Item
|
99
97
|
css={{
|
100
98
|
bg: '$alert_error_dim',
|
@@ -148,7 +146,7 @@ export const DesktopLeaveRoom = ({
|
|
148
146
|
<Dialog.Content css={{ w: 'min(420px, 90%)', p: '$8', bg: '$surface_dim' }}>
|
149
147
|
<EndSessionContent
|
150
148
|
setShowEndStreamAlert={setShowEndStreamAlert}
|
151
|
-
leaveRoom={leaveRoom}
|
149
|
+
leaveRoom={isStreamingOn ? leaveRoom : endRoom}
|
152
150
|
isStreamingOn={isStreamingOn}
|
153
151
|
isModal
|
154
152
|
/>
|
@@ -46,6 +46,10 @@ export const LeaveRoom = ({ screenType }: { screenType: keyof ConferencingScreen
|
|
46
46
|
ToastManager.addToast({ title: 'Error in stopping the stream', type: 'error' });
|
47
47
|
}
|
48
48
|
};
|
49
|
+
const endRoom = () => {
|
50
|
+
hmsActions.endRoom(false, 'End Room');
|
51
|
+
redirectToLeave();
|
52
|
+
};
|
49
53
|
|
50
54
|
const leaveRoom = async ({ endstream = false }) => {
|
51
55
|
if (endstream || (hlsState.running && peersWithStreamingRights.length === 1)) {
|
@@ -59,8 +63,8 @@ export const LeaveRoom = ({ screenType }: { screenType: keyof ConferencingScreen
|
|
59
63
|
return null;
|
60
64
|
}
|
61
65
|
return isMobile ? (
|
62
|
-
<MwebLeaveRoom leaveRoom={leaveRoom} screenType={screenType} />
|
66
|
+
<MwebLeaveRoom leaveRoom={leaveRoom} screenType={screenType} endRoom={endRoom} />
|
63
67
|
) : (
|
64
|
-
<DesktopLeaveRoom leaveRoom={leaveRoom} screenType={screenType} />
|
68
|
+
<DesktopLeaveRoom leaveRoom={leaveRoom} screenType={screenType} endRoom={endRoom} />
|
65
69
|
);
|
66
70
|
};
|
@@ -17,9 +17,11 @@ import { useDropdownList } from '../hooks/useDropdownList';
|
|
17
17
|
export const MwebLeaveRoom = ({
|
18
18
|
leaveRoom,
|
19
19
|
screenType,
|
20
|
+
endRoom,
|
20
21
|
}: {
|
21
22
|
leaveRoom: (args: { endstream: boolean }) => void;
|
22
23
|
screenType: keyof ConferencingScreen;
|
24
|
+
endRoom: () => void;
|
23
25
|
}) => {
|
24
26
|
const [open, setOpen] = useState(false);
|
25
27
|
const [showLeaveRoomAlert, setShowLeaveRoomAlert] = useState(false);
|
@@ -27,8 +29,8 @@ export const MwebLeaveRoom = ({
|
|
27
29
|
const isConnected = useHMSStore(selectIsConnectedToRoom);
|
28
30
|
const permissions = useHMSStore(selectPermissions);
|
29
31
|
const { isStreamingOn } = useRecordingStreaming();
|
32
|
+
const showStream = screenType !== 'hls_live_streaming' && isStreamingOn;
|
30
33
|
|
31
|
-
const showStream = permissions?.hlsStreaming && isStreamingOn;
|
32
34
|
useDropdownList({ open, name: 'LeaveRoom' });
|
33
35
|
|
34
36
|
if (!permissions || !isConnected) {
|
@@ -37,7 +39,7 @@ export const MwebLeaveRoom = ({
|
|
37
39
|
|
38
40
|
return (
|
39
41
|
<Fragment>
|
40
|
-
{
|
42
|
+
{screenType !== 'hls_live_streaming' ? (
|
41
43
|
<Sheet.Root open={open} onOpenChange={setOpen}>
|
42
44
|
<Sheet.Trigger asChild>
|
43
45
|
<LeaveIconButton
|
@@ -67,7 +69,8 @@ export const MwebLeaveRoom = ({
|
|
67
69
|
onClick={() => leaveRoom({ endstream: false })}
|
68
70
|
css={{ pt: 0, mt: '$10', color: '$on_surface_low', '&:hover': { color: '$on_surface_high' } }}
|
69
71
|
/>
|
70
|
-
|
72
|
+
|
73
|
+
{permissions?.endRoom || permissions?.hlsStreaming ? (
|
71
74
|
<LeaveCard
|
72
75
|
title={showStream ? 'End Stream' : 'End Session'}
|
73
76
|
subtitle={`The will end the ${
|
@@ -108,7 +111,7 @@ export const MwebLeaveRoom = ({
|
|
108
111
|
<Sheet.Content css={{ bg: '$surface_dim', p: '$10', pb: '$12' }}>
|
109
112
|
<EndSessionContent
|
110
113
|
setShowEndStreamAlert={setShowEndStreamAlert}
|
111
|
-
leaveRoom={leaveRoom}
|
114
|
+
leaveRoom={isStreamingOn ? leaveRoom : endRoom}
|
112
115
|
isStreamingOn={isStreamingOn}
|
113
116
|
/>
|
114
117
|
</Sheet.Content>
|
@@ -266,7 +266,7 @@ export const MwebOptions = ({
|
|
266
266
|
</Box>
|
267
267
|
</Sheet.Content>
|
268
268
|
</Sheet.Root>
|
269
|
-
<SettingsModal open={openSettingsSheet} onOpenChange={setOpenSettingsSheet} />
|
269
|
+
<SettingsModal open={openSettingsSheet} onOpenChange={setOpenSettingsSheet} screenType={screenType} />
|
270
270
|
{openModals.has(MODALS.MUTE_ALL) && (
|
271
271
|
<MuteAllModal onOpenChange={(value: boolean) => updateState(MODALS.MUTE_ALL, value)} isMobile />
|
272
272
|
)}
|
@@ -53,8 +53,8 @@ export function Notifications() {
|
|
53
53
|
if (roomState !== HMSRoomState.Connected) {
|
54
54
|
return;
|
55
55
|
}
|
56
|
-
// Don't toast message when metadata is updated and raiseHand is false.
|
57
|
-
// Don't toast message in case of local peer.
|
56
|
+
// Don't show toast message when metadata is updated and raiseHand is false.
|
57
|
+
// Don't show toast message in case of local peer.
|
58
58
|
const metadata = getMetadata(notification.data?.metadata);
|
59
59
|
if (!metadata?.isHandRaised || notification.data.isLocal) return;
|
60
60
|
|
@@ -108,7 +108,7 @@ export function Notifications() {
|
|
108
108
|
title: `Error: ${notification.data?.message} - ${notification.data?.description}`,
|
109
109
|
});
|
110
110
|
break;
|
111
|
-
case HMSNotificationTypes.ROLE_UPDATED:
|
111
|
+
case HMSNotificationTypes.ROLE_UPDATED: {
|
112
112
|
if (notification.data?.isLocal) {
|
113
113
|
ToastManager.addToast({
|
114
114
|
title: `You are now a ${notification.data.roleName}`,
|
@@ -116,6 +116,7 @@ export function Notifications() {
|
|
116
116
|
updateRoomLayoutForRole(notification.data.roleName);
|
117
117
|
}
|
118
118
|
break;
|
119
|
+
}
|
119
120
|
case HMSNotificationTypes.CHANGE_TRACK_STATE_REQUEST:
|
120
121
|
const track = notification.data?.track;
|
121
122
|
if (!notification.data.enabled) {
|
@@ -246,7 +246,6 @@ export const PreviewTile = ({ name, error }: { name: string; error?: boolean })
|
|
246
246
|
};
|
247
247
|
|
248
248
|
export const PreviewControls = ({ hideSettings }: { hideSettings: boolean }) => {
|
249
|
-
const isVideoOn = useHMSStore(selectIsLocalVideoEnabled);
|
250
249
|
const isMobile = useMedia(cssConfig.media.md);
|
251
250
|
|
252
251
|
return (
|
@@ -258,8 +257,8 @@ export const PreviewControls = ({ hideSettings }: { hideSettings: boolean }) =>
|
|
258
257
|
}}
|
259
258
|
>
|
260
259
|
<Flex css={{ gap: '$4' }}>
|
261
|
-
<AudioVideoToggle
|
262
|
-
<Suspense fallback="">{
|
260
|
+
<AudioVideoToggle />
|
261
|
+
<Suspense fallback="">{!isMobile ? <VirtualBackground /> : null}</Suspense>
|
263
262
|
</Flex>
|
264
263
|
{!hideSettings ? <PreviewSettings /> : null}
|
265
264
|
</Flex>
|
@@ -27,9 +27,10 @@ export const RoleChangeRequestModal = () => {
|
|
27
27
|
if (!roleChangeRequest?.role) {
|
28
28
|
return;
|
29
29
|
}
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
(async () => {
|
31
|
+
await hmsActions.preview({ asRole: roleChangeRequest.role.name });
|
32
|
+
})();
|
33
|
+
}, [hmsActions, roleChangeRequest, currentRole, updateMetaData]);
|
33
34
|
|
34
35
|
if (!roleChangeRequest?.role) {
|
35
36
|
return null;
|
@@ -34,11 +34,6 @@ const Tile = ({ peerId, width = '100%', height = '100%' }) => {
|
|
34
34
|
const isAudioOnly = useUISettings(UI_SETTINGS.isAudioOnly);
|
35
35
|
const [isMouseHovered, setIsMouseHovered] = useState(false);
|
36
36
|
const showStatsOnTiles = useUISettings(UI_SETTINGS.showStatsOnTiles);
|
37
|
-
const label = getVideoTileLabel({
|
38
|
-
peerName: peer.name,
|
39
|
-
isLocal: false,
|
40
|
-
track,
|
41
|
-
});
|
42
37
|
const fullscreenRef = useRef(null);
|
43
38
|
// fullscreen is for desired state
|
44
39
|
const [fullscreen, setFullscreen] = useState(false);
|
@@ -56,6 +51,13 @@ const Tile = ({ peerId, width = '100%', height = '100%' }) => {
|
|
56
51
|
if (!peer) {
|
57
52
|
return null;
|
58
53
|
}
|
54
|
+
|
55
|
+
const label = getVideoTileLabel({
|
56
|
+
peerName: peer?.name,
|
57
|
+
isLocal: false,
|
58
|
+
track,
|
59
|
+
});
|
60
|
+
|
59
61
|
return (
|
60
62
|
<StyledVideoTile.Root css={{ width, height, p: 0, minHeight: 0 }} data-testid="screenshare_tile">
|
61
63
|
<StyledVideoTile.Container
|
@@ -85,8 +87,14 @@ const Tile = ({ peerId, width = '100%', height = '100%' }) => {
|
|
85
87
|
/>
|
86
88
|
) : null}
|
87
89
|
<StyledVideoTile.Info css={labelStyles}>{label}</StyledVideoTile.Info>
|
88
|
-
{isMouseHovered && !peer
|
89
|
-
<TileMenu
|
90
|
+
{isMouseHovered && !peer.isLocal ? (
|
91
|
+
<TileMenu
|
92
|
+
isScreenshare
|
93
|
+
peerID={peer.id}
|
94
|
+
audioTrackID={audioTrack?.id}
|
95
|
+
videoTrackID={track?.id}
|
96
|
+
enableSpotlightingPeer={false}
|
97
|
+
/>
|
90
98
|
) : null}
|
91
99
|
</StyledVideoTile.Container>
|
92
100
|
</StyledVideoTile.Root>
|