@100mslive/roomkit-react 0.1.5 → 0.1.6-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{HLSView-P57IRMAR.js → HLSView-PY2FKWX3.js} +191 -123
- package/dist/HLSView-PY2FKWX3.js.map +7 -0
- package/dist/Prebuilt/App.d.ts +3 -0
- package/dist/Prebuilt/AppContext.d.ts +13 -0
- package/dist/Prebuilt/common/PeersSorter.d.ts +21 -0
- package/dist/Prebuilt/components/Footer/Footer.d.ts +6 -0
- package/dist/Prebuilt/components/Header/Header.d.ts +2 -0
- package/dist/Prebuilt/components/InsetTile.d.ts +2 -0
- package/dist/Prebuilt/components/Leave/DesktopLeaveRoom.d.ts +7 -0
- package/dist/Prebuilt/components/Leave/EndSessionContent.d.ts +8 -0
- package/dist/Prebuilt/components/Leave/LeaveAtoms.d.ts +2196 -0
- package/dist/Prebuilt/components/Leave/LeaveCard.d.ts +12 -0
- package/dist/Prebuilt/components/Leave/LeaveRoom.d.ts +5 -0
- package/dist/Prebuilt/components/Leave/LeaveSessionContent.d.ts +6 -0
- package/dist/Prebuilt/components/Leave/MwebLeaveRoom.d.ts +7 -0
- package/dist/Prebuilt/components/MoreSettings/MoreSettings.d.ts +6 -0
- package/dist/Prebuilt/components/MoreSettings/SplitComponents/DesktopOptions.d.ts +6 -0
- package/dist/Prebuilt/components/Pagination.d.ts +6 -0
- package/dist/Prebuilt/components/Preview/PreviewForm.d.ts +10 -0
- package/dist/Prebuilt/components/SecondaryTiles.d.ts +3 -0
- package/dist/Prebuilt/components/VideoLayouts/EqualProminence.d.ts +3 -0
- package/dist/Prebuilt/components/VideoLayouts/Grid.d.ts +5 -0
- package/dist/Prebuilt/components/VideoLayouts/GridLayout.d.ts +10 -0
- package/dist/Prebuilt/components/VideoLayouts/ProminenceLayout.d.ts +12 -0
- package/dist/Prebuilt/components/VideoLayouts/RoleProminence.d.ts +3 -0
- package/dist/Prebuilt/components/VideoLayouts/ScreenshareLayout.d.ts +3 -0
- package/dist/Prebuilt/components/VideoLayouts/interface.d.ts +8 -0
- package/dist/Prebuilt/components/hooks/useRoleProminencePeers.d.ts +5 -0
- package/dist/Prebuilt/components/hooks/useTileLayout.d.ts +12 -0
- package/dist/Prebuilt/components/hooks/useVideoTileLayout.d.ts +11 -0
- package/dist/Prebuilt/layouts/SidePane.d.ts +6 -0
- package/dist/Prebuilt/layouts/VideoStreamingSection.d.ts +6 -0
- package/dist/Prebuilt/plugins/whiteboard/ToggleWhiteboard.d.ts +5 -0
- package/dist/Prebuilt/provider/roomLayoutProvider/hooks/useFetchRoomLayout.d.ts +1 -0
- package/dist/Prebuilt/provider/roomLayoutProvider/hooks/useInsetEnabled.d.ts +1 -0
- package/dist/Prebuilt/provider/roomLayoutProvider/hooks/useRoomLayoutScreen.d.ts +17 -0
- package/dist/Prebuilt/provider/roomLayoutProvider/index.d.ts +6 -1
- package/dist/{VirtualBackground-GGCQJ5JM.js → VirtualBackground-AYDHYLIZ.js} +5 -11
- package/dist/VirtualBackground-AYDHYLIZ.js.map +7 -0
- package/dist/{chunk-P5X32KOD.js → chunk-E2M2ZSOL.js} +8 -5
- package/dist/chunk-E2M2ZSOL.js.map +7 -0
- package/dist/chunk-GQD2AGWW.js +888 -0
- package/dist/chunk-GQD2AGWW.js.map +7 -0
- package/dist/{chunk-OSM4QEQG.js → chunk-RXTHJUMZ.js} +2462 -4738
- package/dist/chunk-RXTHJUMZ.js.map +7 -0
- package/dist/conference-V2XZGTKU.js +5927 -0
- package/dist/conference-V2XZGTKU.js.map +7 -0
- package/dist/index.cjs.js +9414 -15534
- package/dist/index.cjs.js.map +4 -4
- package/dist/index.js +2 -2
- package/dist/meta.cjs.json +2156 -3347
- package/dist/meta.esbuild.json +2601 -3885
- package/package.json +7 -7
- package/src/Button/Button.tsx +2 -2
- package/src/Prebuilt/App.tsx +49 -33
- package/src/Prebuilt/{AppContext.jsx → AppContext.tsx} +11 -3
- package/src/Prebuilt/IconButton.jsx +1 -0
- package/src/Prebuilt/Prebuilt.stories.tsx +1 -0
- package/src/Prebuilt/common/{PeersSorter.js → PeersSorter.ts} +15 -10
- package/src/Prebuilt/common/constants.js +3 -112
- package/src/Prebuilt/common/hooks.js +34 -1
- package/src/Prebuilt/common/utils.js +0 -8
- package/src/Prebuilt/components/AppData/AppData.jsx +3 -13
- package/src/Prebuilt/components/AppData/useUISettings.js +0 -4
- package/src/Prebuilt/components/AudioVideoToggle.jsx +6 -0
- package/src/Prebuilt/components/AuthToken.jsx +11 -42
- package/src/Prebuilt/components/Chat/Chat.jsx +57 -26
- package/src/Prebuilt/components/Chat/ChatBody.jsx +92 -32
- package/src/Prebuilt/components/Chat/ChatFooter.jsx +72 -48
- package/src/Prebuilt/components/Chat/ChatParticipantHeader.jsx +73 -0
- package/src/Prebuilt/components/Chat/ChatSelector.jsx +16 -17
- package/src/Prebuilt/components/Chat/ChatSelectorContainer.jsx +81 -0
- package/src/Prebuilt/components/Connection/TileConnection.jsx +30 -12
- package/src/Prebuilt/components/EmojiReaction.jsx +18 -17
- package/src/Prebuilt/components/Footer/ChatToggle.jsx +1 -7
- package/src/Prebuilt/components/Footer/Footer.tsx +89 -0
- package/src/Prebuilt/components/Footer/ParticipantList.jsx +213 -173
- package/src/Prebuilt/components/Footer/RoleAccordion.jsx +78 -0
- package/src/Prebuilt/components/HMSVideo/Controls.jsx +2 -2
- package/src/Prebuilt/components/HMSVideo/HLSQualitySelector.jsx +33 -10
- package/src/Prebuilt/components/HMSVideo/PlayButton.jsx +1 -1
- package/src/Prebuilt/components/HMSVideo/VideoTime.jsx +3 -3
- package/src/Prebuilt/components/HMSVideo/VolumeControl.jsx +38 -9
- package/src/Prebuilt/components/Header/{ConferencingHeader.jsx → Header.tsx} +9 -7
- package/src/Prebuilt/components/Header/HeaderComponents.jsx +13 -4
- package/src/Prebuilt/components/Header/StreamActions.jsx +33 -60
- package/src/Prebuilt/components/Header/index.tsx +1 -0
- package/src/Prebuilt/components/IconButtonWithOptions/IconButtonWithOptions.jsx +17 -3
- package/src/Prebuilt/components/InsetTile.tsx +122 -0
- package/src/Prebuilt/components/{MoreSettings/SplitComponents/DesktopLeaveRoom.jsx → Leave/DesktopLeaveRoom.tsx} +50 -18
- package/src/Prebuilt/components/{EndSessionContent.jsx → Leave/EndSessionContent.tsx} +19 -9
- package/src/Prebuilt/components/Leave/LeaveAtoms.tsx +26 -0
- package/src/Prebuilt/components/{LeaveCard.jsx → Leave/LeaveCard.tsx} +22 -3
- package/src/Prebuilt/components/Leave/LeaveRoom.tsx +63 -0
- package/src/Prebuilt/components/{LeaveSessionContent.jsx → Leave/LeaveSessionContent.tsx} +13 -5
- package/src/Prebuilt/components/{MoreSettings/SplitComponents/MwebLeaveRoom.jsx → Leave/MwebLeaveRoom.tsx} +38 -13
- package/src/Prebuilt/components/MetaActions.jsx +15 -23
- package/src/Prebuilt/components/MoreSettings/ActionTile.jsx +5 -0
- package/src/Prebuilt/components/MoreSettings/ChangeNameContent.jsx +12 -7
- package/src/Prebuilt/components/MoreSettings/ChangeNameModal.jsx +1 -1
- package/src/Prebuilt/components/MoreSettings/FullScreenItem.jsx +1 -4
- package/src/Prebuilt/components/MoreSettings/MoreSettings.tsx +27 -0
- package/src/Prebuilt/components/MoreSettings/SplitComponents/{DesktopOptions.jsx → DesktopOptions.tsx} +86 -75
- package/src/Prebuilt/components/MoreSettings/SplitComponents/MwebOptions.jsx +20 -19
- package/src/Prebuilt/components/Notifications/HLSFailureModal.jsx +3 -1
- package/src/Prebuilt/components/Notifications/Notifications.jsx +18 -11
- package/src/Prebuilt/components/Notifications/PeerNotifications.jsx +14 -2
- package/src/Prebuilt/components/Notifications/PermissionErrorModal.jsx +10 -4
- package/src/Prebuilt/components/PIP/PIPComponent.jsx +7 -16
- package/src/Prebuilt/components/PIP/PIPManager.js +1 -0
- package/src/Prebuilt/components/{Pagination.jsx → Pagination.tsx} +35 -6
- package/src/Prebuilt/components/Playlist/Playlist.jsx +1 -6
- package/src/Prebuilt/components/PostLeave.jsx +7 -7
- package/src/Prebuilt/components/Preview/PreviewContainer.jsx +5 -13
- package/src/Prebuilt/components/Preview/{PreviewForm.jsx → PreviewForm.tsx} +14 -4
- package/src/Prebuilt/components/Preview/PreviewJoin.jsx +9 -7
- package/src/Prebuilt/components/RaiseHand.jsx +0 -7
- package/src/Prebuilt/components/RoleChangeRequestModal.jsx +82 -6
- package/src/Prebuilt/components/ScreenshareDisplay.jsx +4 -10
- package/src/Prebuilt/components/ScreenshareTile.jsx +41 -33
- package/src/Prebuilt/components/SecondaryTiles.tsx +34 -0
- package/src/Prebuilt/components/Settings/LayoutSettings.jsx +2 -12
- package/src/Prebuilt/components/Settings/NotificationSettings.jsx +3 -9
- package/src/Prebuilt/components/Settings/SettingsModal.jsx +3 -9
- package/src/Prebuilt/components/StatsForNerds.jsx +3 -1
- package/src/Prebuilt/components/TileMenu/TileMenu.jsx +15 -16
- package/src/Prebuilt/components/TileMenu/TileMenuContent.jsx +21 -19
- package/src/Prebuilt/components/Toast/ToastConfig.jsx +53 -11
- package/src/Prebuilt/components/VideoLayouts/EqualProminence.tsx +62 -0
- package/src/Prebuilt/components/VideoLayouts/Grid.tsx +41 -0
- package/src/Prebuilt/components/VideoLayouts/GridLayout.tsx +92 -0
- package/src/Prebuilt/components/VideoLayouts/ProminenceLayout.tsx +60 -0
- package/src/Prebuilt/components/VideoLayouts/RoleProminence.tsx +56 -0
- package/src/Prebuilt/components/VideoLayouts/ScreenshareLayout.tsx +36 -0
- package/src/Prebuilt/components/VideoLayouts/interface.ts +9 -0
- package/src/Prebuilt/components/VideoTile.jsx +93 -43
- package/src/Prebuilt/components/conference.jsx +24 -20
- package/src/Prebuilt/components/hooks/useMetadata.jsx +7 -0
- package/src/Prebuilt/components/hooks/useRoleProminencePeers.tsx +38 -0
- package/src/Prebuilt/components/hooks/useTileLayout.tsx +121 -0
- package/src/Prebuilt/components/hooks/useVideoTileLayout.ts +22 -0
- package/src/Prebuilt/components/pdfAnnotator/pdfFileOptions.jsx +5 -72
- package/src/Prebuilt/components/pdfAnnotator/submitPdf.jsx +4 -45
- package/src/Prebuilt/components/pdfAnnotator/uploadedFile.jsx +2 -17
- package/src/Prebuilt/components/peerTileUtils.jsx +1 -1
- package/src/Prebuilt/images/empty-chat.svg +12 -0
- package/src/Prebuilt/layouts/EmbedView.jsx +17 -40
- package/src/Prebuilt/layouts/HLSView.jsx +83 -66
- package/src/Prebuilt/layouts/PDFView.jsx +1 -11
- package/src/Prebuilt/layouts/SidePane.tsx +96 -0
- package/src/Prebuilt/layouts/{mainView.jsx → VideoStreamingSection.tsx} +38 -47
- package/src/Prebuilt/layouts/WhiteboardView.jsx +10 -34
- package/src/Prebuilt/plugins/VirtualBackground/VirtualBackground.jsx +1 -4
- package/src/Prebuilt/plugins/whiteboard/{ToggleWhiteboard.jsx → ToggleWhiteboard.tsx} +5 -9
- package/src/Prebuilt/primitives/DialogContent.jsx +15 -11
- package/src/Prebuilt/provider/roomLayoutProvider/constants/index.ts +17 -2
- package/src/Prebuilt/provider/roomLayoutProvider/hooks/useFetchRoomLayout.ts +36 -13
- package/src/Prebuilt/provider/roomLayoutProvider/hooks/useInsetEnabled.ts +10 -0
- package/src/Prebuilt/provider/roomLayoutProvider/hooks/useRoomLayoutScreen.ts +65 -0
- package/src/Prebuilt/provider/roomLayoutProvider/index.tsx +17 -6
- package/dist/HLSView-P57IRMAR.js.map +0 -7
- package/dist/PinnedTrackView-4FYJEBTB.js +0 -102
- package/dist/PinnedTrackView-4FYJEBTB.js.map +0 -7
- package/dist/VirtualBackground-GGCQJ5JM.js.map +0 -7
- package/dist/chunk-IVTWKQI3.js +0 -827
- package/dist/chunk-IVTWKQI3.js.map +0 -7
- package/dist/chunk-OSM4QEQG.js.map +0 -7
- package/dist/chunk-P5X32KOD.js.map +0 -7
- package/dist/chunk-RVCZPPTL.js +0 -1100
- package/dist/chunk-RVCZPPTL.js.map +0 -7
- package/dist/conference-P6I6ESVF.js +0 -8995
- package/dist/conference-P6I6ESVF.js.map +0 -7
- package/src/Prebuilt/components/Chat/ChatHeader.jsx +0 -67
- package/src/Prebuilt/components/EqualProminence.jsx +0 -180
- package/src/Prebuilt/components/FirstPersonDisplay.jsx +0 -50
- package/src/Prebuilt/components/Footer/Footer.jsx +0 -73
- package/src/Prebuilt/components/Header/Header.jsx +0 -8
- package/src/Prebuilt/components/Header/StreamingHeader.jsx +0 -54
- package/src/Prebuilt/components/LeaveRoom.jsx +0 -94
- package/src/Prebuilt/components/MoreSettings/MoreSettings.jsx +0 -10
- package/src/Prebuilt/components/Notifications/MessageNotifications.jsx +0 -25
- package/src/Prebuilt/components/gridView.jsx +0 -85
- package/src/Prebuilt/components/hooks/useFeatures.js +0 -22
- package/src/Prebuilt/components/hooks/useNavigation.js +0 -19
- package/src/Prebuilt/components/hooks/useSkipPreview.jsx +0 -20
- package/src/Prebuilt/components/pdfAnnotator/pdfErrorView.jsx +0 -29
- package/src/Prebuilt/images/Logo.svg +0 -8
- package/src/Prebuilt/layouts/ActiveSpeakerView.jsx +0 -34
- package/src/Prebuilt/layouts/InsetView.jsx +0 -260
- package/src/Prebuilt/layouts/PinnedTrackView.jsx +0 -59
- package/src/Prebuilt/layouts/SidePane.jsx +0 -52
- package/src/Prebuilt/layouts/mainGridView.jsx +0 -98
- package/src/Prebuilt/layouts/screenShareView.jsx +0 -183
- /package/{src/Prebuilt/components/Header/index.jsx → dist/Prebuilt/components/Header/index.d.ts} +0 -0
- /package/src/Prebuilt/components/{ScreenShare.jsx → ScreenShareToggle.jsx} +0 -0
- /package/src/{assets → Prebuilt/images}/android-perm-1.png +0 -0
- /package/src/{assets → Prebuilt/images}/ios-perm-0.png +0 -0
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"prebuilt",
|
|
11
11
|
"roomkit"
|
|
12
12
|
],
|
|
13
|
-
"version": "0.1.
|
|
13
|
+
"version": "0.1.6-alpha.0",
|
|
14
14
|
"author": "100ms",
|
|
15
15
|
"license": "MIT",
|
|
16
16
|
"files": [
|
|
@@ -75,11 +75,11 @@
|
|
|
75
75
|
"react": ">=17.0.2 <19.0.0"
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
|
-
"@100mslive/hls-player": "0.1.
|
|
79
|
-
"@100mslive/hms-virtual-background": "1.11.
|
|
80
|
-
"@100mslive/react-icons": "0.8.
|
|
81
|
-
"@100mslive/react-sdk": "0.8.
|
|
82
|
-
"@100mslive/types-prebuilt": "0.
|
|
78
|
+
"@100mslive/hls-player": "0.1.15-alpha.0",
|
|
79
|
+
"@100mslive/hms-virtual-background": "1.11.15-alpha.0",
|
|
80
|
+
"@100mslive/react-icons": "0.8.15-alpha.0",
|
|
81
|
+
"@100mslive/react-sdk": "0.8.15-alpha.0",
|
|
82
|
+
"@100mslive/types-prebuilt": "0.11.0",
|
|
83
83
|
"@emoji-mart/data": "^1.0.6",
|
|
84
84
|
"@emoji-mart/react": "^1.0.1",
|
|
85
85
|
"@radix-ui/react-accordion": "1.0.0",
|
|
@@ -114,5 +114,5 @@
|
|
|
114
114
|
"uuid": "^8.3.2",
|
|
115
115
|
"worker-timers": "^7.0.40"
|
|
116
116
|
},
|
|
117
|
-
"gitHead": "
|
|
117
|
+
"gitHead": "447c3c90520aec5943d996050e263de842a61be2"
|
|
118
118
|
}
|
package/src/Button/Button.tsx
CHANGED
|
@@ -151,8 +151,8 @@ const StyledButton = styled('button', {
|
|
|
151
151
|
'$alert_error_bright',
|
|
152
152
|
'$alert_error_dim',
|
|
153
153
|
'$alert_error_dim',
|
|
154
|
-
'$
|
|
155
|
-
'$
|
|
154
|
+
'$alert_error_brighter',
|
|
155
|
+
'$on_primary_low',
|
|
156
156
|
),
|
|
157
157
|
primary: getButtonVariants(
|
|
158
158
|
'$primary_default',
|
package/src/Prebuilt/App.tsx
CHANGED
|
@@ -32,17 +32,18 @@ import PostLeave from './components/PostLeave';
|
|
|
32
32
|
import PreviewContainer from './components/Preview/PreviewContainer';
|
|
33
33
|
// @ts-ignore: No implicit Any
|
|
34
34
|
import { ToastContainer } from './components/Toast/ToastContainer';
|
|
35
|
-
import { RoomLayoutContext, RoomLayoutProvider } from './provider/roomLayoutProvider';
|
|
35
|
+
import { RoomLayoutContext, RoomLayoutProvider, useRoomLayout } from './provider/roomLayoutProvider';
|
|
36
36
|
import { Box } from '../Layout';
|
|
37
37
|
import { globalStyles, HMSThemeProvider } from '../Theme';
|
|
38
|
-
// @ts-ignore: No implicit Any
|
|
39
38
|
import { HMSPrebuiltContext, useHMSPrebuiltContext } from './AppContext';
|
|
40
39
|
// @ts-ignore: No implicit Any
|
|
41
40
|
import { FlyingEmoji } from './plugins/FlyingEmoji';
|
|
42
41
|
// @ts-ignore: No implicit Any
|
|
43
42
|
import { RemoteStopScreenshare } from './plugins/RemoteStopScreenshare';
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
import {
|
|
44
|
+
useRoomLayoutLeaveScreen,
|
|
45
|
+
useRoomLayoutPreviewScreen,
|
|
46
|
+
} from './provider/roomLayoutProvider/hooks/useRoomLayoutScreen';
|
|
46
47
|
// @ts-ignore: No implicit Any
|
|
47
48
|
import { FeatureFlags } from './services/FeatureFlags';
|
|
48
49
|
|
|
@@ -62,6 +63,9 @@ export type HMSPrebuiltProps = {
|
|
|
62
63
|
themes?: Theme[];
|
|
63
64
|
options?: HMSPrebuiltOptions;
|
|
64
65
|
screens?: Screens;
|
|
66
|
+
authToken?: string;
|
|
67
|
+
roomId?: string;
|
|
68
|
+
role?: string;
|
|
65
69
|
onLeave?: () => void;
|
|
66
70
|
};
|
|
67
71
|
|
|
@@ -86,6 +90,9 @@ export const HMSPrebuilt = React.forwardRef<HMSPrebuiltRefType, HMSPrebuiltProps
|
|
|
86
90
|
(
|
|
87
91
|
{
|
|
88
92
|
roomCode = '',
|
|
93
|
+
authToken = '',
|
|
94
|
+
roomId = '',
|
|
95
|
+
role = '',
|
|
89
96
|
logo,
|
|
90
97
|
typography,
|
|
91
98
|
themes,
|
|
@@ -108,6 +115,7 @@ export const HMSPrebuilt = React.forwardRef<HMSPrebuiltRefType, HMSPrebuiltProps
|
|
|
108
115
|
const hmsActions = hms.getActions();
|
|
109
116
|
const hmsNotifications = hms.getNotifications();
|
|
110
117
|
const hmsStats = hms.getStats();
|
|
118
|
+
hms.triggerOnSubscribe();
|
|
111
119
|
|
|
112
120
|
reactiveStore.current = {
|
|
113
121
|
hmsActions,
|
|
@@ -152,6 +160,15 @@ export const HMSPrebuilt = React.forwardRef<HMSPrebuiltRefType, HMSPrebuiltProps
|
|
|
152
160
|
screens,
|
|
153
161
|
};
|
|
154
162
|
|
|
163
|
+
if (!roomCode && !(authToken && roomId && role)) {
|
|
164
|
+
console.error(`
|
|
165
|
+
HMSPrebuilt can be initialised by providing:
|
|
166
|
+
either just "roomCode" or "authToken" and "roomId" and "role".
|
|
167
|
+
Please check if you are providing the above values for initialising prebuilt.
|
|
168
|
+
`);
|
|
169
|
+
throw Error('Incorrect initializing params for HMSPrebuilt component');
|
|
170
|
+
}
|
|
171
|
+
|
|
155
172
|
if (!hydrated) {
|
|
156
173
|
return null;
|
|
157
174
|
}
|
|
@@ -163,8 +180,8 @@ export const HMSPrebuilt = React.forwardRef<HMSPrebuiltRefType, HMSPrebuiltProps
|
|
|
163
180
|
<HMSPrebuiltContext.Provider
|
|
164
181
|
value={{
|
|
165
182
|
roomCode,
|
|
166
|
-
|
|
167
|
-
|
|
183
|
+
roomId,
|
|
184
|
+
role,
|
|
168
185
|
onLeave,
|
|
169
186
|
userName,
|
|
170
187
|
userId,
|
|
@@ -185,7 +202,8 @@ export const HMSPrebuilt = React.forwardRef<HMSPrebuiltRefType, HMSPrebuiltProps
|
|
|
185
202
|
>
|
|
186
203
|
<RoomLayoutProvider roomLayoutEndpoint={roomLayoutEndpoint} overrideLayout={overrideLayout}>
|
|
187
204
|
<RoomLayoutContext.Consumer>
|
|
188
|
-
{
|
|
205
|
+
{data => {
|
|
206
|
+
const layout = data?.layout;
|
|
189
207
|
const theme: Theme = layout?.themes?.[0] || ({} as Theme);
|
|
190
208
|
const { typography } = layout || {};
|
|
191
209
|
let fontFamily = ['sans-serif'];
|
|
@@ -219,7 +237,7 @@ export const HMSPrebuilt = React.forwardRef<HMSPrebuiltRefType, HMSPrebuiltProps
|
|
|
219
237
|
'-webkit-text-size-adjust': '100%',
|
|
220
238
|
}}
|
|
221
239
|
>
|
|
222
|
-
<AppRoutes authTokenByRoomCodeEndpoint={tokenByRoomCodeEndpoint} />
|
|
240
|
+
<AppRoutes authTokenByRoomCodeEndpoint={tokenByRoomCodeEndpoint} defaultAuthToken={authToken} />
|
|
223
241
|
</Box>
|
|
224
242
|
</HMSThemeProvider>
|
|
225
243
|
);
|
|
@@ -237,26 +255,15 @@ HMSPrebuilt.displayName = 'HMSPrebuilt';
|
|
|
237
255
|
|
|
238
256
|
const Redirector = ({ showPreview }: { showPreview: boolean }) => {
|
|
239
257
|
const { roomId, role } = useParams();
|
|
240
|
-
|
|
241
|
-
if (!roomId && !role) {
|
|
242
|
-
return <Navigate to="/" />;
|
|
243
|
-
}
|
|
244
|
-
if (!roomId) {
|
|
245
|
-
return <Navigate to="/" />;
|
|
246
|
-
}
|
|
247
|
-
if (['streaming', 'preview', 'meeting', 'leave'].includes(roomId) && !role) {
|
|
248
|
-
return <Navigate to="/" />;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
return <Navigate to={`${getRoutePrefix()}/${showPreview ? 'preview' : 'meeting'}/${roomId}/${role || ''}`} />;
|
|
258
|
+
return <Navigate to={`/${showPreview ? 'preview' : 'meeting'}/${roomId}/${role || ''}`} />;
|
|
252
259
|
};
|
|
253
260
|
|
|
254
261
|
const RouteList = () => {
|
|
255
|
-
const {
|
|
256
|
-
|
|
262
|
+
const { isPreviewScreenEnabled } = useRoomLayoutPreviewScreen();
|
|
263
|
+
const { isLeaveScreenEnabled } = useRoomLayoutLeaveScreen();
|
|
257
264
|
return (
|
|
258
265
|
<Routes>
|
|
259
|
-
{
|
|
266
|
+
{isPreviewScreenEnabled ? (
|
|
260
267
|
<Route path="preview">
|
|
261
268
|
<Route
|
|
262
269
|
path=":roomId/:role"
|
|
@@ -275,7 +282,7 @@ const RouteList = () => {
|
|
|
275
282
|
}
|
|
276
283
|
/>
|
|
277
284
|
</Route>
|
|
278
|
-
)}
|
|
285
|
+
) : null}
|
|
279
286
|
<Route path="meeting">
|
|
280
287
|
<Route
|
|
281
288
|
path=":roomId/:role"
|
|
@@ -294,15 +301,15 @@ const RouteList = () => {
|
|
|
294
301
|
}
|
|
295
302
|
/>
|
|
296
303
|
</Route>
|
|
297
|
-
{
|
|
304
|
+
{isLeaveScreenEnabled ? (
|
|
298
305
|
<Route path="leave">
|
|
299
306
|
<Route path=":roomId/:role" element={<PostLeave />} />
|
|
300
307
|
<Route path=":roomId" element={<PostLeave />} />
|
|
301
308
|
</Route>
|
|
302
|
-
)}
|
|
309
|
+
) : null}
|
|
303
310
|
|
|
304
|
-
<Route path="/:roomId/:role" element={<Redirector showPreview={
|
|
305
|
-
<Route path="/:roomId/" element={<Redirector showPreview={
|
|
311
|
+
<Route path="/:roomId/:role" element={<Redirector showPreview={isPreviewScreenEnabled} />} />
|
|
312
|
+
<Route path="/:roomId/" element={<Redirector showPreview={isPreviewScreenEnabled} />} />
|
|
306
313
|
</Routes>
|
|
307
314
|
);
|
|
308
315
|
};
|
|
@@ -335,7 +342,14 @@ const Router = ({ children }: { children: ReactElement }) => {
|
|
|
335
342
|
);
|
|
336
343
|
};
|
|
337
344
|
|
|
338
|
-
function AppRoutes({
|
|
345
|
+
function AppRoutes({
|
|
346
|
+
authTokenByRoomCodeEndpoint,
|
|
347
|
+
defaultAuthToken,
|
|
348
|
+
}: {
|
|
349
|
+
authTokenByRoomCodeEndpoint: string;
|
|
350
|
+
defaultAuthToken?: string;
|
|
351
|
+
}) {
|
|
352
|
+
const roomLayout = useRoomLayout();
|
|
339
353
|
return (
|
|
340
354
|
<Router>
|
|
341
355
|
<>
|
|
@@ -346,10 +360,12 @@ function AppRoutes({ authTokenByRoomCodeEndpoint }: { authTokenByRoomCodeEndpoin
|
|
|
346
360
|
<RemoteStopScreenshare />
|
|
347
361
|
<KeyboardHandler />
|
|
348
362
|
<BeamSpeakerLabelsLogging />
|
|
349
|
-
<AuthToken authTokenByRoomCodeEndpoint={authTokenByRoomCodeEndpoint} />
|
|
350
|
-
|
|
351
|
-
<
|
|
352
|
-
|
|
363
|
+
<AuthToken authTokenByRoomCodeEndpoint={authTokenByRoomCodeEndpoint} defaultAuthToken={defaultAuthToken} />
|
|
364
|
+
{roomLayout && (
|
|
365
|
+
<Routes>
|
|
366
|
+
<Route path="/*" element={<RouteList />} />
|
|
367
|
+
</Routes>
|
|
368
|
+
)}
|
|
353
369
|
</>
|
|
354
370
|
</Router>
|
|
355
371
|
);
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import React, { useContext } from 'react';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
type HMSPrebuiltContextType = {
|
|
4
|
+
roomCode: string;
|
|
5
|
+
roomId?: string;
|
|
6
|
+
role?: string;
|
|
7
|
+
userName?: string;
|
|
8
|
+
userId?: string;
|
|
9
|
+
endpoints?: object;
|
|
10
|
+
onLeave?: () => void;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const HMSPrebuiltContext = React.createContext<HMSPrebuiltContextType>({
|
|
6
14
|
roomCode: '',
|
|
7
15
|
userName: '',
|
|
8
16
|
userId: '',
|
|
@@ -9,6 +9,7 @@ export default {
|
|
|
9
9
|
roomCode: { control: { type: 'text' }, defaultValue: '' },
|
|
10
10
|
logo: { control: { type: 'object' }, defaultValue: null },
|
|
11
11
|
typography: { control: { type: 'object' }, defaultValue: 'Roboto' },
|
|
12
|
+
options: { control: { type: 'object' }, defaultValue: {} },
|
|
12
13
|
},
|
|
13
14
|
} as Meta<typeof HMSPrebuilt>;
|
|
14
15
|
|
|
@@ -1,17 +1,22 @@
|
|
|
1
|
-
import { selectDominantSpeaker } from '@100mslive/
|
|
1
|
+
import { HMSPeer, HMSPeerID, IStoreReadOnly, selectDominantSpeaker } from '@100mslive/react-sdk';
|
|
2
2
|
|
|
3
3
|
class PeersSorter {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
storeUnsubscribe: undefined | (() => void) = undefined;
|
|
5
|
+
store: IStoreReadOnly<any>;
|
|
6
|
+
peers: Map<string, HMSPeer>;
|
|
7
|
+
lruPeers: Set<HMSPeerID>;
|
|
8
|
+
tilesPerPage!: number;
|
|
9
|
+
speaker?: HMSPeer;
|
|
10
|
+
listeners: Set<(peers: HMSPeer[]) => void> = new Set();
|
|
6
11
|
|
|
7
|
-
constructor(store) {
|
|
12
|
+
constructor(store: IStoreReadOnly<any>) {
|
|
8
13
|
this.store = store;
|
|
9
14
|
this.peers = new Map();
|
|
10
15
|
this.lruPeers = new Set();
|
|
11
16
|
this.speaker = undefined;
|
|
12
17
|
}
|
|
13
18
|
|
|
14
|
-
setPeersAndTilesPerPage = ({ peers, tilesPerPage }) => {
|
|
19
|
+
setPeersAndTilesPerPage = ({ peers, tilesPerPage }: { peers: HMSPeer[]; tilesPerPage: number }) => {
|
|
15
20
|
this.tilesPerPage = tilesPerPage;
|
|
16
21
|
const peerIds = new Set(peers.map(peer => peer.id));
|
|
17
22
|
// remove existing peers which are no longer provided
|
|
@@ -33,7 +38,7 @@ class PeersSorter {
|
|
|
33
38
|
this.moveSpeakerToFront(this.speaker);
|
|
34
39
|
};
|
|
35
40
|
|
|
36
|
-
onUpdate = cb => {
|
|
41
|
+
onUpdate = (cb: (peers: HMSPeer[]) => void) => {
|
|
37
42
|
this.listeners.add(cb);
|
|
38
43
|
};
|
|
39
44
|
|
|
@@ -43,7 +48,7 @@ class PeersSorter {
|
|
|
43
48
|
this.storeUnsubscribe?.();
|
|
44
49
|
};
|
|
45
50
|
|
|
46
|
-
moveSpeakerToFront = speaker => {
|
|
51
|
+
moveSpeakerToFront = (speaker?: HMSPeer) => {
|
|
47
52
|
if (!speaker) {
|
|
48
53
|
this.updateListeners();
|
|
49
54
|
return;
|
|
@@ -54,7 +59,7 @@ class PeersSorter {
|
|
|
54
59
|
}
|
|
55
60
|
// delete to insert at beginning
|
|
56
61
|
this.lruPeers.delete(speaker.id);
|
|
57
|
-
|
|
62
|
+
const lruPeerArray = Array.from(this.lruPeers);
|
|
58
63
|
while (lruPeerArray.length >= this.tilesPerPage) {
|
|
59
64
|
lruPeerArray.pop();
|
|
60
65
|
}
|
|
@@ -62,7 +67,7 @@ class PeersSorter {
|
|
|
62
67
|
this.updateListeners();
|
|
63
68
|
};
|
|
64
69
|
|
|
65
|
-
onDominantSpeakerChange = speaker => {
|
|
70
|
+
onDominantSpeakerChange = (speaker: HMSPeer | null) => {
|
|
66
71
|
if (speaker && speaker.id !== this?.speaker?.id) {
|
|
67
72
|
this.speaker = speaker;
|
|
68
73
|
this.moveSpeakerToFront(speaker);
|
|
@@ -70,7 +75,7 @@ class PeersSorter {
|
|
|
70
75
|
};
|
|
71
76
|
|
|
72
77
|
updateListeners = () => {
|
|
73
|
-
const orderedPeers = [];
|
|
78
|
+
const orderedPeers: HMSPeer[] = [];
|
|
74
79
|
this.lruPeers.forEach(key => {
|
|
75
80
|
const peer = this.peers.get(key);
|
|
76
81
|
if (peer) {
|
|
@@ -1,102 +1,11 @@
|
|
|
1
1
|
import { parsedUserAgent } from '@100mslive/react-sdk';
|
|
2
2
|
|
|
3
|
-
export const defaultAudioList = [
|
|
4
|
-
{
|
|
5
|
-
name: 'Audio1',
|
|
6
|
-
id: 'audio1',
|
|
7
|
-
metadata: {
|
|
8
|
-
description: 'Artist1',
|
|
9
|
-
},
|
|
10
|
-
url: 'https://bc-public-static-assets.s3.ap-south-1.amazonaws.com/webapp/playlist/audio1.mp3',
|
|
11
|
-
type: 'audio',
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
name: 'Audio2',
|
|
15
|
-
id: 'audio2',
|
|
16
|
-
metadata: {
|
|
17
|
-
description: 'Artist2',
|
|
18
|
-
},
|
|
19
|
-
url: 'https://bc-public-static-assets.s3.ap-south-1.amazonaws.com/webapp/playlist/audio2.mp3',
|
|
20
|
-
type: 'audio',
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
name: 'Audio3',
|
|
24
|
-
id: 'audio3',
|
|
25
|
-
metadata: {
|
|
26
|
-
description: 'Artist3',
|
|
27
|
-
},
|
|
28
|
-
url: 'https://bc-public-static-assets.s3.ap-south-1.amazonaws.com/webapp/playlist/audio3.mp3',
|
|
29
|
-
type: 'audio',
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
name: 'Audio4',
|
|
33
|
-
id: 'audio4',
|
|
34
|
-
metadata: {
|
|
35
|
-
description: 'Artist4',
|
|
36
|
-
},
|
|
37
|
-
url: 'https://bc-public-static-assets.s3.ap-south-1.amazonaws.com/webapp/playlist/audio4.mp3',
|
|
38
|
-
type: 'audio',
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
name: 'Audio5',
|
|
42
|
-
id: 'audio5',
|
|
43
|
-
metadata: {
|
|
44
|
-
description: 'Artist5',
|
|
45
|
-
},
|
|
46
|
-
url: 'https://bc-public-static-assets.s3.ap-south-1.amazonaws.com/webapp/playlist/audio5.mp3',
|
|
47
|
-
type: 'audio',
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
name: 'Audio6',
|
|
51
|
-
id: 'audio6',
|
|
52
|
-
metadata: {
|
|
53
|
-
description: 'Artist6',
|
|
54
|
-
},
|
|
55
|
-
url: 'https://bc-public-static-assets.s3.ap-south-1.amazonaws.com/webapp/playlist/audio6.mp3',
|
|
56
|
-
type: 'audio',
|
|
57
|
-
},
|
|
58
|
-
];
|
|
59
|
-
|
|
60
|
-
export const defaultVideoList = [
|
|
61
|
-
{
|
|
62
|
-
name: 'Video1',
|
|
63
|
-
id: 'video1',
|
|
64
|
-
metadata: {
|
|
65
|
-
description: 'Artist1',
|
|
66
|
-
},
|
|
67
|
-
url: 'https://bc-public-static-assets.s3.ap-south-1.amazonaws.com/webapp/playlist/video1.mp4',
|
|
68
|
-
type: 'video',
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
name: 'Video2',
|
|
72
|
-
id: 'video2',
|
|
73
|
-
metadata: {
|
|
74
|
-
description: 'Artist2',
|
|
75
|
-
},
|
|
76
|
-
url: 'https://bc-public-static-assets.s3.ap-south-1.amazonaws.com/webapp/playlist/video2.mp4',
|
|
77
|
-
type: 'video',
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
name: 'Video3',
|
|
81
|
-
id: 'video3',
|
|
82
|
-
metadata: {
|
|
83
|
-
description: 'Artist2',
|
|
84
|
-
},
|
|
85
|
-
url: 'https://bc-public-static-assets.s3.ap-south-1.amazonaws.com/webapp/playlist/video3.mp4',
|
|
86
|
-
type: 'video',
|
|
87
|
-
},
|
|
88
|
-
];
|
|
89
|
-
|
|
90
|
-
export const DEFAULT_HLS_ROLE_KEY = 'HLS_VIEWER_ROLE';
|
|
91
|
-
export const DEFAULT_HLS_VIEWER_ROLE = 'hls-viewer';
|
|
92
3
|
export const DEFAULT_WAITING_VIEWER_ROLE = 'waiting-room';
|
|
93
4
|
export const QUERY_PARAM_SKIP_PREVIEW = 'skip_preview';
|
|
94
5
|
export const QUERY_PARAM_SKIP_PREVIEW_HEADFUL = 'skip_preview_headful';
|
|
95
6
|
export const QUERY_PARAM_NAME = 'name';
|
|
96
7
|
export const QUERY_PARAM_VIEW_MODE = 'ui_mode';
|
|
97
|
-
export const QUERY_PARAM_AUTH_TOKEN = 'auth_token';
|
|
98
8
|
export const QUERY_PARAM_PREVIEW_AS_ROLE = 'preview_as_role';
|
|
99
|
-
export const UI_MODE_ACTIVE_SPEAKER = 'activespeaker';
|
|
100
9
|
export const UI_MODE_GRID = 'grid';
|
|
101
10
|
export const MAX_TOASTS = 5;
|
|
102
11
|
export const RTMP_RECORD_RESOLUTION_MIN = 480;
|
|
@@ -135,6 +44,7 @@ export const APP_DATA = {
|
|
|
135
44
|
authToken: 'authToken',
|
|
136
45
|
pdfConfig: 'pdfConfig',
|
|
137
46
|
minimiseInset: 'minimiseInset',
|
|
47
|
+
activeScreensharePeerId: 'activeScreensharePeerId',
|
|
138
48
|
};
|
|
139
49
|
export const UI_SETTINGS = {
|
|
140
50
|
isAudioOnly: 'isAudioOnly',
|
|
@@ -150,8 +60,6 @@ export const SIDE_PANE_OPTIONS = {
|
|
|
150
60
|
PARTICIPANTS: 'Participants',
|
|
151
61
|
CHAT: 'Chat',
|
|
152
62
|
STREAMING: 'STREAMING',
|
|
153
|
-
TILES: 'TILES',
|
|
154
|
-
SCREEN_TILES: 'SCREEN_TILES',
|
|
155
63
|
};
|
|
156
64
|
|
|
157
65
|
export const SUBSCRIBED_NOTIFICATIONS = {
|
|
@@ -180,27 +88,10 @@ export const isIPadOS = false;
|
|
|
180
88
|
// navigator?.maxTouchPoints > 2 &&
|
|
181
89
|
// navigator?.userAgent?.match(/Mac/);
|
|
182
90
|
|
|
183
|
-
export const FEATURE_LIST = {
|
|
184
|
-
AUDIO_ONLY_SCREENSHARE: 'audioscreenshare',
|
|
185
|
-
AUDIO_PLAYLIST: 'audioplaylist',
|
|
186
|
-
VIDEO_PLAYLIST: 'videoplaylist',
|
|
187
|
-
EMOJI_REACTION: 'emojireaction',
|
|
188
|
-
AUDIO_PLUGINS: 'audioplugins',
|
|
189
|
-
VIDEO_PLUGINS: 'videoplugins',
|
|
190
|
-
WHITEBOARD: 'whiteboard',
|
|
191
|
-
CHANGE_NAME: 'changename',
|
|
192
|
-
FULLSCREEN: 'fullscreen',
|
|
193
|
-
PICTURE_IN_PICTURE: 'pip',
|
|
194
|
-
STARTS_FOR_NERDS: 'statsfornerds',
|
|
195
|
-
EMBED_URL: 'embedurl',
|
|
196
|
-
BRB: 'brb',
|
|
197
|
-
HAND_RAISE: 'handraise',
|
|
198
|
-
CHAT: 'chat',
|
|
199
|
-
PIN_TILE: 'pintile',
|
|
200
|
-
};
|
|
201
|
-
|
|
202
91
|
export const SESSION_STORE_KEY = {
|
|
203
92
|
TRANSCRIPTION_STATE: 'transcriptionState',
|
|
204
93
|
PINNED_MESSAGE: 'pinnedMessage',
|
|
205
94
|
SPOTLIGHT: 'spotlight',
|
|
206
95
|
};
|
|
96
|
+
|
|
97
|
+
export const ROLE_CHANGE_DECLINED = 'role_change_declined';
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
import { useEffect, useRef, useState } from 'react';
|
|
3
3
|
import { JoinForm_JoinBtnType } from '@100mslive/types-prebuilt/elements/join_form';
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
selectAvailableRoleNames,
|
|
6
|
+
selectIsConnectedToRoom,
|
|
7
|
+
selectPeerCount,
|
|
8
|
+
selectPeerMetadata,
|
|
9
|
+
selectPeers,
|
|
10
|
+
selectRemotePeers,
|
|
11
|
+
useHMSStore,
|
|
12
|
+
useHMSVanillaStore,
|
|
13
|
+
} from '@100mslive/react-sdk';
|
|
5
14
|
import { useRoomLayout } from '../provider/roomLayoutProvider';
|
|
6
15
|
import { isInternalRole } from './utils';
|
|
7
16
|
|
|
@@ -53,3 +62,27 @@ export const useShowStreamingUI = () => {
|
|
|
53
62
|
const { join_form } = layout?.screens?.preview?.default?.elements || {};
|
|
54
63
|
return join_form?.join_btn_type === JoinForm_JoinBtnType.JOIN_BTN_TYPE_JOIN_AND_GO_LIVE;
|
|
55
64
|
};
|
|
65
|
+
|
|
66
|
+
// The search results should not have role name matches
|
|
67
|
+
export const useParticipants = params => {
|
|
68
|
+
const isConnected = useHMSStore(selectIsConnectedToRoom);
|
|
69
|
+
const peerCount = useHMSStore(selectPeerCount);
|
|
70
|
+
const availableRoles = useHMSStore(selectAvailableRoleNames);
|
|
71
|
+
let participantList = useHMSStore(isConnected ? selectPeers : selectRemotePeers);
|
|
72
|
+
const rolesWithParticipants = Array.from(new Set(participantList.map(peer => peer.roleName)));
|
|
73
|
+
const vanillaStore = useHMSVanillaStore();
|
|
74
|
+
if (params?.metadata?.isHandRaised) {
|
|
75
|
+
participantList = participantList.filter(peer => {
|
|
76
|
+
return vanillaStore.getState(selectPeerMetadata(peer.id)).isHandRaised;
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
if (params?.role && availableRoles.includes(params.role)) {
|
|
80
|
+
participantList = participantList.filter(peer => peer.roleName === params.role);
|
|
81
|
+
}
|
|
82
|
+
if (params?.search) {
|
|
83
|
+
const search = params.search;
|
|
84
|
+
// Removed peer.roleName?.toLowerCase().includes(search)
|
|
85
|
+
participantList = participantList.filter(peer => peer.name.toLowerCase().includes(search));
|
|
86
|
+
}
|
|
87
|
+
return { participants: participantList, isConnected, peerCount, rolesWithParticipants };
|
|
88
|
+
};
|
|
@@ -56,14 +56,6 @@ export const isScreenshareSupported = () => {
|
|
|
56
56
|
return typeof navigator.mediaDevices.getDisplayMedia !== 'undefined';
|
|
57
57
|
};
|
|
58
58
|
|
|
59
|
-
export const getRoutePrefix = () => {
|
|
60
|
-
return window.location.pathname.startsWith('/streaming') ? '/streaming' : '';
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
export const isStreamingKit = () => {
|
|
64
|
-
return window.location.pathname.startsWith('/streaming');
|
|
65
|
-
};
|
|
66
|
-
|
|
67
59
|
export const isInternalRole = role => role && role.startsWith('__internal');
|
|
68
60
|
|
|
69
61
|
export const metadataPayloadParser = payload => {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import React, { useEffect } from 'react';
|
|
2
|
-
import { useSearchParam } from 'react-use';
|
|
3
2
|
import {
|
|
4
3
|
HMSRoomState,
|
|
5
4
|
selectAvailableRoleNames,
|
|
@@ -17,16 +16,11 @@ import { normalizeAppPolicyConfig } from '../init/initUtils';
|
|
|
17
16
|
import { UserPreferencesKeys, useUserPreferences } from '../hooks/useUserPreferences';
|
|
18
17
|
import { useIsSidepaneTypeOpen, useSidepaneReset, useSidepaneState, useSidepaneToggle } from './useSidepane';
|
|
19
18
|
import { useSetAppDataByKey } from './useUISettings';
|
|
20
|
-
import { getMetadata } from '../../common/utils';
|
|
21
19
|
import {
|
|
22
20
|
APP_DATA,
|
|
23
21
|
CHAT_SELECTOR,
|
|
24
|
-
DEFAULT_HLS_ROLE_KEY,
|
|
25
|
-
DEFAULT_HLS_VIEWER_ROLE,
|
|
26
22
|
DEFAULT_WAITING_VIEWER_ROLE,
|
|
27
|
-
QUERY_PARAM_VIEW_MODE,
|
|
28
23
|
SIDE_PANE_OPTIONS,
|
|
29
|
-
UI_MODE_ACTIVE_SPEAKER,
|
|
30
24
|
UI_MODE_GRID,
|
|
31
25
|
UI_SETTINGS,
|
|
32
26
|
} from '../../common/constants';
|
|
@@ -66,11 +60,11 @@ const initialAppData = {
|
|
|
66
60
|
[APP_DATA.hlsStarted]: false,
|
|
67
61
|
[APP_DATA.rtmpStarted]: false,
|
|
68
62
|
[APP_DATA.recordingStarted]: false,
|
|
69
|
-
[APP_DATA.hlsViewerRole]: DEFAULT_HLS_VIEWER_ROLE,
|
|
70
63
|
[APP_DATA.waitingViewerRole]: DEFAULT_WAITING_VIEWER_ROLE,
|
|
71
64
|
[APP_DATA.dropdownList]: [],
|
|
72
65
|
[APP_DATA.authToken]: '',
|
|
73
66
|
[APP_DATA.minimiseInset]: false,
|
|
67
|
+
[APP_DATA.activeScreensharePeerId]: '',
|
|
74
68
|
};
|
|
75
69
|
|
|
76
70
|
export const AppData = React.memo(({ appDetails, tokenEndpoint }) => {
|
|
@@ -82,7 +76,6 @@ export const AppData = React.memo(({ appDetails, tokenEndpoint }) => {
|
|
|
82
76
|
const roleNames = useHMSStore(selectAvailableRoleNames);
|
|
83
77
|
const rolesMap = useHMSStore(selectRolesMap);
|
|
84
78
|
const localPeerRole = useHMSStore(selectLocalPeerRoleName);
|
|
85
|
-
const isDefaultModeActiveSpeaker = useSearchParam(QUERY_PARAM_VIEW_MODE) === UI_MODE_ACTIVE_SPEAKER;
|
|
86
79
|
|
|
87
80
|
useEffect(() => {
|
|
88
81
|
if (!isConnected && sidePane && sidePane !== SIDE_PANE_OPTIONS.PARTICIPANTS) {
|
|
@@ -103,17 +96,14 @@ export const AppData = React.memo(({ appDetails, tokenEndpoint }) => {
|
|
|
103
96
|
const uiSettings = preferences || {};
|
|
104
97
|
const updatedSettings = {
|
|
105
98
|
...uiSettings,
|
|
106
|
-
[UI_SETTINGS.uiViewMode]:
|
|
107
|
-
? UI_MODE_ACTIVE_SPEAKER
|
|
108
|
-
: uiSettings.uiViewMode || UI_MODE_GRID,
|
|
99
|
+
[UI_SETTINGS.uiViewMode]: uiSettings.uiViewMode || UI_MODE_GRID,
|
|
109
100
|
};
|
|
110
101
|
hmsActions.setAppData(APP_DATA.uiSettings, updatedSettings, true);
|
|
111
|
-
}, [preferences,
|
|
102
|
+
}, [preferences, hmsActions]);
|
|
112
103
|
|
|
113
104
|
useEffect(() => {
|
|
114
105
|
const appData = {
|
|
115
106
|
[APP_DATA.tokenEndpoint]: tokenEndpoint,
|
|
116
|
-
[APP_DATA.hlsViewerRole]: getMetadata(appDetails)[DEFAULT_HLS_ROLE_KEY] || DEFAULT_HLS_VIEWER_ROLE,
|
|
117
107
|
[APP_DATA.appConfig]: getAppDetails(appDetails),
|
|
118
108
|
};
|
|
119
109
|
for (const key in appData) {
|
|
@@ -51,10 +51,6 @@ export const useIsHeadless = () => {
|
|
|
51
51
|
return isHeadless;
|
|
52
52
|
};
|
|
53
53
|
|
|
54
|
-
export const useHLSViewerRole = () => {
|
|
55
|
-
return useHMSStore(selectAppData(APP_DATA.hlsViewerRole));
|
|
56
|
-
};
|
|
57
|
-
|
|
58
54
|
export const useWaitingViewerRole = () => {
|
|
59
55
|
return useHMSStore(selectAppData(APP_DATA.waitingViewerRole));
|
|
60
56
|
};
|
|
@@ -67,6 +67,8 @@ export const AudioVideoToggle = ({ hideOptions = false }) => {
|
|
|
67
67
|
const videoTrackId = useHMSStore(selectLocalVideoTrackID);
|
|
68
68
|
const localVideoTrack = useHMSStore(selectVideoTrackByID(videoTrackId));
|
|
69
69
|
const roomState = useHMSStore(selectRoomState);
|
|
70
|
+
const isAudioPermitted = toggleAudio && audioInput?.length > 0;
|
|
71
|
+
const isVideoPermitted = toggleVideo && videoInput?.length > 0;
|
|
70
72
|
|
|
71
73
|
return (
|
|
72
74
|
<Fragment>
|
|
@@ -90,6 +92,8 @@ export const AudioVideoToggle = ({ hideOptions = false }) => {
|
|
|
90
92
|
) : (
|
|
91
93
|
<IconButtonWithOptions
|
|
92
94
|
options={formattedAudioInputList}
|
|
95
|
+
disabled={!isAudioPermitted}
|
|
96
|
+
onDisabledClick={toggleAudio}
|
|
93
97
|
tooltipMessage={`Turn ${isLocalAudioEnabled ? 'off' : 'on'} audio (${isMacOS ? '⌘' : 'ctrl'} + d)`}
|
|
94
98
|
icon={
|
|
95
99
|
!isLocalAudioEnabled ? (
|
|
@@ -124,6 +128,8 @@ export const AudioVideoToggle = ({ hideOptions = false }) => {
|
|
|
124
128
|
</Tooltip>
|
|
125
129
|
) : (
|
|
126
130
|
<IconButtonWithOptions
|
|
131
|
+
disabled={!isVideoPermitted}
|
|
132
|
+
onDisabledClick={toggleVideo}
|
|
127
133
|
options={formattedVideoInputList}
|
|
128
134
|
tooltipMessage={`Turn ${isLocalVideoEnabled ? 'off' : 'on'} video (${isMacOS ? '⌘' : 'ctrl'} + e)`}
|
|
129
135
|
icon={
|