@100mslive/roomkit-react 0.3.14 → 0.3.15-alpha.1
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/Diagnostics/components.d.ts +2 -0
- package/dist/{HLSView-67SFNI2P.js → HLSView-33JUAQ33.js} +2 -2
- package/dist/{HLSView-TYHCIAWX.css → HLSView-KKS3ZEYM.css} +3 -3
- package/dist/{HLSView-TYHCIAWX.css.map → HLSView-KKS3ZEYM.css.map} +1 -1
- package/dist/{chunk-VCXILOW6.js → chunk-MTS2LMGT.js} +2324 -11723
- package/dist/chunk-MTS2LMGT.js.map +7 -0
- package/dist/index.cjs.css +2 -2
- package/dist/index.cjs.css.map +1 -1
- package/dist/index.cjs.js +4232 -13646
- package/dist/index.cjs.js.map +4 -4
- package/dist/index.css +2 -2
- package/dist/index.css.map +1 -1
- package/dist/index.js +1 -1
- package/dist/meta.cjs.json +117 -214
- package/dist/meta.esbuild.json +126 -223
- package/package.json +8 -7
- package/src/Diagnostics/AudioTest.tsx +13 -11
- package/src/Diagnostics/BrowserTest.tsx +5 -5
- package/src/Diagnostics/ConnectivityTest.tsx +3 -4
- package/src/Diagnostics/Diagnostics.tsx +34 -18
- package/src/Diagnostics/VideoTest.tsx +7 -7
- package/src/Diagnostics/components.tsx +6 -5
- package/src/Prebuilt/components/Chat/ChatBody.tsx +23 -8
- package/src/Prebuilt/components/Header/AdditionalRoomState.jsx +4 -66
- package/src/Prebuilt/components/VideoLayouts/ScreenshareLayout.tsx +2 -2
- package/src/Prebuilt/components/VideoLayouts/WhiteboardLayout.tsx +4 -0
- package/dist/Diagnostics/hms.d.ts +0 -9
- package/dist/Prebuilt/components/HMSVideo/PlayButton.d.ts +0 -6
- package/dist/Prebuilt/components/Polls/common/VoterList.d.ts +0 -4
- package/dist/chunk-VCXILOW6.js.map +0 -7
- package/src/Diagnostics/hms.ts +0 -9
- package/src/Prebuilt/common/roles.js +0 -4
- package/src/Prebuilt/components/AppData/useAppConfig.js +0 -7
- package/src/Prebuilt/components/HMSVideo/PlayButton.tsx +0 -27
- package/src/Prebuilt/components/Header/AmbientMusic.jsx +0 -88
- package/src/Prebuilt/components/Image.jsx +0 -7
- package/src/Prebuilt/components/MetaActions.jsx +0 -37
- package/src/Prebuilt/components/Playlist/Playlist.jsx +0 -124
- package/src/Prebuilt/components/Playlist/PlaylistControls.jsx +0 -172
- package/src/Prebuilt/components/Playlist/PlaylistItem.jsx +0 -51
- package/src/Prebuilt/components/Playlist/VideoPlayer.jsx +0 -95
- package/src/Prebuilt/components/Polls/CreatePollQuiz/Timer.jsx +0 -71
- package/src/Prebuilt/components/Polls/common/VoterList.tsx +0 -22
- package/src/Prebuilt/components/ScreenshareHintModal.jsx +0 -37
- /package/dist/{HLSView-67SFNI2P.js.map → HLSView-33JUAQ33.js.map} +0 -0
package/package.json
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
"prebuilt",
|
11
11
|
"roomkit"
|
12
12
|
],
|
13
|
-
"version": "0.3.
|
13
|
+
"version": "0.3.15-alpha.1",
|
14
14
|
"author": "100ms",
|
15
15
|
"license": "MIT",
|
16
16
|
"repository": {
|
@@ -67,6 +67,7 @@
|
|
67
67
|
"babel-loader": "^8.2.5",
|
68
68
|
"babel-plugin-react-require": "3.1.3",
|
69
69
|
"esbuild-loader": "^4.0.2",
|
70
|
+
"knip": "^5.11.0",
|
70
71
|
"react": "^18.1.0",
|
71
72
|
"storybook-dark-mode": "^3.0.0"
|
72
73
|
},
|
@@ -74,12 +75,12 @@
|
|
74
75
|
"react": ">=17.0.2 <19.0.0"
|
75
76
|
},
|
76
77
|
"dependencies": {
|
77
|
-
"@100mslive/hls-player": "0.3.
|
78
|
+
"@100mslive/hls-player": "0.3.15-alpha.1",
|
78
79
|
"@100mslive/hms-noise-cancellation": "0.0.1",
|
79
|
-
"@100mslive/hms-virtual-background": "1.13.
|
80
|
-
"@100mslive/hms-whiteboard": "0.0.
|
81
|
-
"@100mslive/react-icons": "0.10.
|
82
|
-
"@100mslive/react-sdk": "0.10.
|
80
|
+
"@100mslive/hms-virtual-background": "1.13.15-alpha.1",
|
81
|
+
"@100mslive/hms-whiteboard": "0.0.5-alpha.1",
|
82
|
+
"@100mslive/react-icons": "0.10.15-alpha.1",
|
83
|
+
"@100mslive/react-sdk": "0.10.15-alpha.1",
|
83
84
|
"@100mslive/types-prebuilt": "0.12.9",
|
84
85
|
"@emoji-mart/data": "^1.0.6",
|
85
86
|
"@emoji-mart/react": "^1.0.1",
|
@@ -115,5 +116,5 @@
|
|
115
116
|
"uuid": "^8.3.2",
|
116
117
|
"worker-timers": "^7.0.40"
|
117
118
|
},
|
118
|
-
"gitHead": "
|
119
|
+
"gitHead": "d841ae70e97bfd176bcfc86b44f6ad939832fe13"
|
119
120
|
}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/* eslint-disable react/prop-types */
|
2
|
-
import React, { useEffect, useState } from 'react';
|
2
|
+
import React, { useContext, useEffect, useState } from 'react';
|
3
3
|
import {
|
4
4
|
HMSException,
|
5
5
|
selectDevices,
|
@@ -11,14 +11,13 @@ import {
|
|
11
11
|
} from '@100mslive/react-sdk';
|
12
12
|
import { MicOnIcon, SpeakerIcon, StopIcon } from '@100mslive/react-icons';
|
13
13
|
import { PermissionErrorModal } from '../Prebuilt/components/Notifications/PermissionErrorModal';
|
14
|
-
import { TestContainer, TestFooter } from './components';
|
14
|
+
import { DiagnosticsContext, TestContainer, TestFooter } from './components';
|
15
15
|
import { Button } from '../Button';
|
16
16
|
import { Box, Flex } from '../Layout';
|
17
17
|
import { Progress } from '../Progress';
|
18
18
|
import { Text } from '../Text';
|
19
19
|
// @ts-ignore: No implicit any
|
20
20
|
import { DeviceSelector } from './DeviceSelector';
|
21
|
-
import { hmsDiagnostics } from './hms';
|
22
21
|
import { useAudioOutputTest } from '../Prebuilt/components/hooks/useAudioOutputTest';
|
23
22
|
import { TEST_AUDIO_URL } from '../Prebuilt/common/constants';
|
24
23
|
|
@@ -27,6 +26,7 @@ const SelectContainer = ({ children }: { children: React.ReactNode }) => (
|
|
27
26
|
);
|
28
27
|
|
29
28
|
const MicTest = ({ setError }: { setError: React.Dispatch<React.SetStateAction<Error | undefined>> }) => {
|
29
|
+
const { hmsDiagnostics } = useContext(DiagnosticsContext);
|
30
30
|
const devices = useHMSStore(selectDevices);
|
31
31
|
const [isRecording, setIsRecording] = useState(false);
|
32
32
|
const [selectedMic, setSelectedMic] = useState(devices.audioInput[0]?.deviceId || 'default');
|
@@ -45,8 +45,9 @@ const MicTest = ({ setError }: { setError: React.Dispatch<React.SetStateAction<E
|
|
45
45
|
selection={selectedMic}
|
46
46
|
icon={<MicOnIcon />}
|
47
47
|
onChange={(deviceId: string) => {
|
48
|
+
setError(undefined);
|
48
49
|
setSelectedMic(deviceId);
|
49
|
-
hmsDiagnostics
|
50
|
+
hmsDiagnostics?.stopMicCheck();
|
50
51
|
}}
|
51
52
|
/>
|
52
53
|
<Flex css={{ gap: '$6', alignItems: 'center' }}>
|
@@ -55,9 +56,9 @@ const MicTest = ({ setError }: { setError: React.Dispatch<React.SetStateAction<E
|
|
55
56
|
icon
|
56
57
|
onClick={() => {
|
57
58
|
isRecording
|
58
|
-
? hmsDiagnostics
|
59
|
+
? hmsDiagnostics?.stopMicCheck()
|
59
60
|
: hmsDiagnostics
|
60
|
-
|
61
|
+
?.startMicCheck({
|
61
62
|
inputDevice: selectedMic,
|
62
63
|
onError: (err: Error) => {
|
63
64
|
setError(err);
|
@@ -79,14 +80,14 @@ const MicTest = ({ setError }: { setError: React.Dispatch<React.SetStateAction<E
|
|
79
80
|
<Button
|
80
81
|
icon
|
81
82
|
variant="standard"
|
82
|
-
outlined={hmsDiagnostics
|
83
|
+
outlined={hmsDiagnostics?.getRecordedAudio() === TEST_AUDIO_URL}
|
83
84
|
onClick={() => {
|
84
85
|
if (audioRef.current) {
|
85
|
-
audioRef.current.src = hmsDiagnostics
|
86
|
+
audioRef.current.src = hmsDiagnostics?.getRecordedAudio() || '';
|
86
87
|
audioRef.current.play();
|
87
88
|
}
|
88
89
|
}}
|
89
|
-
disabled={playing || hmsDiagnostics
|
90
|
+
disabled={playing || hmsDiagnostics?.getRecordedAudio() === TEST_AUDIO_URL}
|
90
91
|
>
|
91
92
|
<SpeakerIcon />
|
92
93
|
{playing ? 'Playing...' : 'Playback'}
|
@@ -141,10 +142,11 @@ const SpeakerTest = () => {
|
|
141
142
|
};
|
142
143
|
|
143
144
|
export const AudioTest = () => {
|
145
|
+
const { hmsDiagnostics } = useContext(DiagnosticsContext);
|
144
146
|
const [error, setError] = useState<Error | undefined>();
|
145
147
|
useEffect(() => {
|
146
|
-
hmsDiagnostics
|
147
|
-
}, []);
|
148
|
+
hmsDiagnostics?.requestPermission({ audio: true }).catch(error => setError(error));
|
149
|
+
}, [hmsDiagnostics]);
|
148
150
|
|
149
151
|
return (
|
150
152
|
<>
|
@@ -1,9 +1,8 @@
|
|
1
|
-
import React, { useEffect, useState } from 'react';
|
1
|
+
import React, { useContext, useEffect, useState } from 'react';
|
2
2
|
import { parsedUserAgent } from '@100mslive/react-sdk';
|
3
|
-
import { TestContainer, TestFooter } from './components';
|
3
|
+
import { DiagnosticsContext, TestContainer, TestFooter } from './components';
|
4
4
|
import { Box, Flex } from '../Layout';
|
5
5
|
import { Text } from '../Text';
|
6
|
-
import { hmsDiagnostics } from './hms';
|
7
6
|
|
8
7
|
const CMS_MEDIA_SERVER = 'https://storage.googleapis.com/100ms-cms-prod/';
|
9
8
|
|
@@ -103,14 +102,15 @@ const CheckDetails = ({ title, value, iconURL }: { title: string; value: string;
|
|
103
102
|
);
|
104
103
|
|
105
104
|
export const BrowserTest = () => {
|
105
|
+
const { hmsDiagnostics } = useContext(DiagnosticsContext);
|
106
106
|
const [error, setError] = useState<Error | undefined>();
|
107
107
|
useEffect(() => {
|
108
108
|
try {
|
109
|
-
hmsDiagnostics
|
109
|
+
hmsDiagnostics?.checkBrowserSupport();
|
110
110
|
} catch (err) {
|
111
111
|
setError(err as Error);
|
112
112
|
}
|
113
|
-
}, []);
|
113
|
+
}, [hmsDiagnostics]);
|
114
114
|
return (
|
115
115
|
<>
|
116
116
|
<TestContainer css={{ display: 'flex', gap: '$8', '@lg': { display: 'block' } }}>
|
@@ -7,7 +7,6 @@ import { Box, Flex } from '../Layout';
|
|
7
7
|
import { Loading } from '../Loading';
|
8
8
|
import { formatBytes } from '../Stats';
|
9
9
|
import { Text } from '../Text';
|
10
|
-
import { hmsDiagnostics } from './hms';
|
11
10
|
|
12
11
|
const Regions = {
|
13
12
|
in: 'India',
|
@@ -237,7 +236,7 @@ const ConnectivityTestReport = ({
|
|
237
236
|
if (progress !== undefined) {
|
238
237
|
return (
|
239
238
|
<TestContainer css={{ textAlign: 'center' }}>
|
240
|
-
<Text css={{ c: '$primary_bright',
|
239
|
+
<Text css={{ c: '$primary_bright', display: 'flex', justifyContent: 'center' }}>
|
241
240
|
<Loading size="3.5rem" color="currentColor" />
|
242
241
|
</Text>
|
243
242
|
<Text variant="h6" css={{ mt: '$8' }}>
|
@@ -310,7 +309,7 @@ const RegionSelector = ({
|
|
310
309
|
};
|
311
310
|
|
312
311
|
export const ConnectivityTest = () => {
|
313
|
-
const { setConnectivityTested } = useContext(DiagnosticsContext);
|
312
|
+
const { hmsDiagnostics, setConnectivityTested } = useContext(DiagnosticsContext);
|
314
313
|
const [region, setRegion] = useState<string | undefined>(Object.keys(Regions)[0]);
|
315
314
|
const [error, setError] = useState<Error | undefined>();
|
316
315
|
const [progress, setProgress] = useState<ConnectivityState>();
|
@@ -321,7 +320,7 @@ export const ConnectivityTest = () => {
|
|
321
320
|
setError(undefined);
|
322
321
|
setResult(undefined);
|
323
322
|
hmsDiagnostics
|
324
|
-
|
323
|
+
?.startConnectivityCheck(
|
325
324
|
state => {
|
326
325
|
setProgress(state);
|
327
326
|
},
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import React, { useContext } from 'react';
|
2
|
-
import { HMSRoomProvider } from '@100mslive/react-sdk';
|
1
|
+
import React, { useContext, useRef, useState } from 'react';
|
2
|
+
import { HMSRoomProvider, useHMSActions } from '@100mslive/react-sdk';
|
3
3
|
import { CheckCircleIcon, ConnectivityIcon, GlobeIcon, MicOnIcon, VideoOnIcon } from '@100mslive/react-icons';
|
4
4
|
import { DiagnosticsContext, DiagnosticsSteps } from './components';
|
5
5
|
import { Box, Flex } from '../Layout';
|
@@ -8,7 +8,6 @@ import { HMSThemeProvider } from '../Theme';
|
|
8
8
|
import { AudioTest } from './AudioTest';
|
9
9
|
import { BrowserTest } from './BrowserTest';
|
10
10
|
import { ConnectivityTest } from './ConnectivityTest';
|
11
|
-
import { hmsActions, hmsNotifications, hmsStats, hmsStore } from './hms';
|
12
11
|
import { VideoTest } from './VideoTest';
|
13
12
|
|
14
13
|
const DiagnosticsStepIcon: Record<string, React.ReactNode> = {
|
@@ -110,24 +109,41 @@ const DiagnosticsStepsList = () => {
|
|
110
109
|
);
|
111
110
|
};
|
112
111
|
|
112
|
+
const DiagnosticsProvider = () => {
|
113
|
+
const actions = useHMSActions();
|
114
|
+
const [activeStep, setActiveStep] = useState(Object.keys(DiagnosticsSteps)[0]);
|
115
|
+
const [connectivityTested, setConnectivityTested] = useState(false);
|
116
|
+
const diagnosticsRef = useRef(actions.initDiagnostics());
|
117
|
+
|
118
|
+
return (
|
119
|
+
<DiagnosticsContext.Provider
|
120
|
+
value={{
|
121
|
+
hmsDiagnostics: diagnosticsRef.current,
|
122
|
+
activeStep,
|
123
|
+
setActiveStep,
|
124
|
+
connectivityTested,
|
125
|
+
setConnectivityTested,
|
126
|
+
}}
|
127
|
+
>
|
128
|
+
<Container>
|
129
|
+
<Text variant="h4">Pre-call Test</Text>
|
130
|
+
<Text variant="md" css={{ c: '$on_primary_medium' }}>
|
131
|
+
Make sure your devices and network are good to go, let's get started.
|
132
|
+
</Text>
|
133
|
+
<Flex css={{ direction: 'column', mt: '$12', justifyItems: 'center' }}>
|
134
|
+
<DiagnosticsStepsList />
|
135
|
+
<DiagnosticsStep />
|
136
|
+
</Flex>
|
137
|
+
</Container>
|
138
|
+
</DiagnosticsContext.Provider>
|
139
|
+
);
|
140
|
+
};
|
141
|
+
|
113
142
|
export const Diagnostics = () => {
|
114
|
-
const [activeStep, setActiveStep] = React.useState(Object.keys(DiagnosticsSteps)[0]);
|
115
|
-
const [connectivityTested, setConnectivityTested] = React.useState(false);
|
116
143
|
return (
|
117
|
-
<HMSRoomProvider
|
144
|
+
<HMSRoomProvider>
|
118
145
|
<HMSThemeProvider themeType="default">
|
119
|
-
<
|
120
|
-
<Container>
|
121
|
-
<Text variant="h4">Pre-call Test</Text>
|
122
|
-
<Text variant="md" css={{ c: '$on_primary_medium' }}>
|
123
|
-
Make sure your devices and network are good to go, let's get started.
|
124
|
-
</Text>
|
125
|
-
<Flex css={{ direction: 'column', mt: '$12', justifyItems: 'center' }}>
|
126
|
-
<DiagnosticsStepsList />
|
127
|
-
<DiagnosticsStep />
|
128
|
-
</Flex>
|
129
|
-
</Container>
|
130
|
-
</DiagnosticsContext.Provider>
|
146
|
+
<DiagnosticsProvider />
|
131
147
|
</HMSThemeProvider>
|
132
148
|
</HMSRoomProvider>
|
133
149
|
);
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React, { useEffect, useState } from 'react';
|
1
|
+
import React, { useContext, useEffect, useState } from 'react';
|
2
2
|
import {
|
3
3
|
HMSException,
|
4
4
|
selectDevices,
|
@@ -8,16 +8,16 @@ import {
|
|
8
8
|
} from '@100mslive/react-sdk';
|
9
9
|
import { VideoOnIcon } from '@100mslive/react-icons';
|
10
10
|
import { PermissionErrorModal } from '../Prebuilt/components/Notifications/PermissionErrorModal';
|
11
|
-
import { TestContainer, TestFooter } from './components';
|
11
|
+
import { DiagnosticsContext, TestContainer, TestFooter } from './components';
|
12
12
|
import { Flex } from '../Layout';
|
13
13
|
import { Text } from '../Text';
|
14
14
|
import { Video } from '../Video';
|
15
15
|
import { StyledVideoTile } from '../VideoTile';
|
16
16
|
// @ts-ignore: No implicit any
|
17
17
|
import { DeviceSelector } from './DeviceSelector';
|
18
|
-
import { hmsDiagnostics } from './hms';
|
19
18
|
|
20
19
|
export const VideoTest = () => {
|
20
|
+
const { hmsDiagnostics } = useContext(DiagnosticsContext);
|
21
21
|
const allDevices = useHMSStore(selectDevices);
|
22
22
|
const { videoInput } = allDevices;
|
23
23
|
const trackID = useHMSStore(selectLocalVideoTrackID);
|
@@ -25,8 +25,8 @@ export const VideoTest = () => {
|
|
25
25
|
const [error, setError] = useState<HMSException | undefined>();
|
26
26
|
|
27
27
|
useEffect(() => {
|
28
|
-
hmsDiagnostics
|
29
|
-
}, []);
|
28
|
+
hmsDiagnostics?.startCameraCheck().catch(err => setError(err));
|
29
|
+
}, [hmsDiagnostics]);
|
30
30
|
|
31
31
|
return (
|
32
32
|
<>
|
@@ -55,8 +55,8 @@ export const VideoTest = () => {
|
|
55
55
|
icon={<VideoOnIcon />}
|
56
56
|
selection={sdkSelectedDevices.videoInputDeviceId}
|
57
57
|
onChange={async (deviceId: string) => {
|
58
|
-
hmsDiagnostics
|
59
|
-
hmsDiagnostics
|
58
|
+
hmsDiagnostics?.stopCameraCheck();
|
59
|
+
hmsDiagnostics?.startCameraCheck(deviceId);
|
60
60
|
}}
|
61
61
|
/>
|
62
62
|
</Flex>
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import React, { useContext } from 'react';
|
2
|
+
import { HMSDiagnosticsInterface } from '@100mslive/react-sdk';
|
2
3
|
import { Button } from '../Button';
|
3
4
|
import { Box, Flex } from '../Layout';
|
4
5
|
import { Text } from '../Text';
|
5
6
|
import { CSS } from '../Theme';
|
6
|
-
import { hmsDiagnostics } from './hms';
|
7
7
|
|
8
8
|
export const DiagnosticsSteps: Record<string, string> = {
|
9
9
|
browser: 'Browser Support',
|
@@ -13,6 +13,7 @@ export const DiagnosticsSteps: Record<string, string> = {
|
|
13
13
|
};
|
14
14
|
|
15
15
|
export const DiagnosticsContext = React.createContext<{
|
16
|
+
hmsDiagnostics?: HMSDiagnosticsInterface;
|
16
17
|
activeStep: string;
|
17
18
|
setActiveStep: React.Dispatch<React.SetStateAction<string>>;
|
18
19
|
connectivityTested: boolean;
|
@@ -41,15 +42,15 @@ export const TestFooter = ({
|
|
41
42
|
error?: Error;
|
42
43
|
children?: React.ReactNode;
|
43
44
|
}) => {
|
44
|
-
const { activeStep, setActiveStep } = useContext(DiagnosticsContext);
|
45
|
+
const { hmsDiagnostics, activeStep, setActiveStep } = useContext(DiagnosticsContext);
|
45
46
|
|
46
47
|
const onNextStep = () => {
|
47
48
|
if (activeStep === 'audio') {
|
48
|
-
hmsDiagnostics
|
49
|
+
hmsDiagnostics?.stopMicCheck();
|
49
50
|
} else if (activeStep === 'video') {
|
50
|
-
hmsDiagnostics
|
51
|
+
hmsDiagnostics?.stopCameraCheck();
|
51
52
|
} else if (activeStep === 'connectivity') {
|
52
|
-
hmsDiagnostics
|
53
|
+
hmsDiagnostics?.stopConnectivityCheck();
|
53
54
|
}
|
54
55
|
|
55
56
|
const keys = Object.keys(DiagnosticsSteps);
|
@@ -75,28 +75,35 @@ const MessageTypeContainer = ({ left, right }: { left?: string; right?: string }
|
|
75
75
|
ml: '$2',
|
76
76
|
mr: '$4',
|
77
77
|
gap: '$space$2',
|
78
|
+
flexWrap: 'nowrap',
|
78
79
|
}}
|
79
80
|
>
|
80
81
|
{left && (
|
81
|
-
<
|
82
|
+
<Text
|
82
83
|
variant="xs"
|
83
84
|
as="span"
|
84
|
-
css={{
|
85
|
+
css={{
|
86
|
+
color: '$on_surface_medium',
|
87
|
+
textTransform: 'capitalize',
|
88
|
+
fontWeight: '$regular',
|
89
|
+
whiteSpace: 'nowrap',
|
90
|
+
}}
|
85
91
|
>
|
86
92
|
{left}
|
87
|
-
</
|
93
|
+
</Text>
|
88
94
|
)}
|
89
95
|
{right && (
|
90
|
-
<
|
96
|
+
<Text
|
91
97
|
as="span"
|
92
98
|
variant="overline"
|
93
99
|
css={{
|
94
100
|
color: '$on_surface_medium',
|
95
101
|
fontWeight: '$regular',
|
102
|
+
whiteSpace: 'nowrap',
|
96
103
|
}}
|
97
104
|
>
|
98
105
|
{right}
|
99
|
-
</
|
106
|
+
</Text>
|
100
107
|
)}
|
101
108
|
</Flex>
|
102
109
|
);
|
@@ -169,7 +176,7 @@ const SenderName = styled(Text, {
|
|
169
176
|
overflow: 'hidden',
|
170
177
|
textOverflow: 'ellipsis',
|
171
178
|
whiteSpace: 'nowrap',
|
172
|
-
|
179
|
+
width: '100%',
|
173
180
|
minWidth: 0,
|
174
181
|
color: '$on_surface_high',
|
175
182
|
fontWeight: '$semiBold',
|
@@ -251,7 +258,15 @@ const ChatMessage = React.memo(
|
|
251
258
|
}}
|
252
259
|
as="div"
|
253
260
|
>
|
254
|
-
<Flex
|
261
|
+
<Flex
|
262
|
+
align="baseline"
|
263
|
+
css={{
|
264
|
+
flexWrap: 'nowrap',
|
265
|
+
maxWidth: 'calc(100% - 10ch)',
|
266
|
+
textOverflow: 'ellipsis',
|
267
|
+
whiteSpace: 'nowrap',
|
268
|
+
}}
|
269
|
+
>
|
255
270
|
{message.senderName === 'You' || !message.senderName ? (
|
256
271
|
<SenderName
|
257
272
|
as="span"
|
@@ -261,7 +276,7 @@ const ChatMessage = React.memo(
|
|
261
276
|
{message.senderName || 'Anonymous'}
|
262
277
|
</SenderName>
|
263
278
|
) : (
|
264
|
-
<Tooltip title={message.senderName} side="top" align="start">
|
279
|
+
<Tooltip title={message.senderName} side="top" align="start" boxCss={{ zIndex: 50 }}>
|
265
280
|
<SenderName
|
266
281
|
as="span"
|
267
282
|
variant="sub2"
|
@@ -1,16 +1,8 @@
|
|
1
1
|
import React, { useState } from 'react';
|
2
|
-
import { selectLocalPeerID,
|
3
|
-
import {
|
4
|
-
AudioPlayerIcon,
|
5
|
-
ChevronDownIcon,
|
6
|
-
ChevronUpIcon,
|
7
|
-
MusicIcon,
|
8
|
-
ShareScreenIcon,
|
9
|
-
VideoPlayerIcon,
|
10
|
-
} from '@100mslive/react-icons';
|
2
|
+
import { selectLocalPeerID, useHMSStore, useScreenShare } from '@100mslive/react-sdk';
|
3
|
+
import { ChevronDownIcon, ChevronUpIcon, MusicIcon, ShareScreenIcon, VideoPlayerIcon } from '@100mslive/react-icons';
|
11
4
|
import { Box, Dropdown, Flex, Text, Tooltip } from '../../../';
|
12
5
|
import { useUISettings } from '../AppData/useUISettings';
|
13
|
-
import { usePlaylistMusic } from '../hooks/usePlaylistMusic';
|
14
6
|
import { useScreenshareAudio } from '../hooks/useScreenshareAudio';
|
15
7
|
import { UI_SETTINGS } from '../../common/constants';
|
16
8
|
|
@@ -35,29 +27,21 @@ export const getRecordingText = ({ isBrowserRecordingOn, isServerRecordingOn, is
|
|
35
27
|
* Display state of recording, streaming, playlist, whiteboard
|
36
28
|
*/
|
37
29
|
export const AdditionalRoomState = () => {
|
38
|
-
const playlist = usePlaylistMusic();
|
39
30
|
const isAudioOnly = useUISettings(UI_SETTINGS.isAudioOnly);
|
40
31
|
const screenshareAudio = useScreenshareAudio();
|
41
32
|
const [open, setOpen] = useState(false);
|
42
|
-
const isPlaylistInactive = [
|
43
|
-
!playlist.peer || !playlist.track,
|
44
|
-
!playlist.peer?.isLocal && !playlist.track?.enabled,
|
45
|
-
playlist.peer?.isLocal && !playlist.selection,
|
46
|
-
].some(Boolean);
|
47
33
|
const isAudioshareInactive = [
|
48
34
|
!screenshareAudio.peer || !screenshareAudio.track,
|
49
35
|
!screenshareAudio.peer?.isLocal && !screenshareAudio.track?.enabled,
|
50
36
|
].some(Boolean);
|
51
37
|
|
52
|
-
const peerSharingPlaylist = useHMSStore(selectPeerSharingVideoPlaylist);
|
53
38
|
const localPeerID = useHMSStore(selectLocalPeerID);
|
54
|
-
const isVideoPlayListPlaying = !!peerSharingPlaylist?.id;
|
55
39
|
const { screenSharingPeerName, screenSharingPeerId, screenShareVideoTrackId } = useScreenShare();
|
56
40
|
|
57
41
|
const isVideoScreenSharingOn = !!screenShareVideoTrackId;
|
58
42
|
const shouldShowScreenShareState = isAudioOnly && isVideoScreenSharingOn;
|
59
|
-
const shouldShowVideoState = isAudioOnly
|
60
|
-
if (
|
43
|
+
const shouldShowVideoState = isAudioOnly;
|
44
|
+
if (isAudioshareInactive && !shouldShowScreenShareState && !shouldShowVideoState) {
|
61
45
|
return null;
|
62
46
|
}
|
63
47
|
|
@@ -96,50 +80,12 @@ export const AdditionalRoomState = () => {
|
|
96
80
|
</Flex>
|
97
81
|
</Tooltip>
|
98
82
|
)}
|
99
|
-
{!isPlaylistInactive && (
|
100
|
-
<Tooltip title="Playlist Music">
|
101
|
-
<Flex align="center" css={{ color: '$on_primary_high', mx: '$2' }}>
|
102
|
-
<AudioPlayerIcon width={24} height={24} />
|
103
|
-
</Flex>
|
104
|
-
</Tooltip>
|
105
|
-
)}
|
106
83
|
<Box css={{ '@lg': { display: 'none' }, color: '$on_surface_low' }}>
|
107
84
|
{open ? <ChevronUpIcon /> : <ChevronDownIcon />}
|
108
85
|
</Box>
|
109
86
|
</Flex>
|
110
87
|
</Dropdown.Trigger>
|
111
88
|
<Dropdown.Content sideOffset={5} align="end" css={{ w: '$60' }}>
|
112
|
-
{!isPlaylistInactive && (
|
113
|
-
<Dropdown.Item css={{ color: '$on_primary_high' }}>
|
114
|
-
<AudioPlayerIcon width={24} height={24} />
|
115
|
-
<Text variant="sm" css={{ ml: '$2', flex: '1 1 0' }}>
|
116
|
-
Playlist is playing
|
117
|
-
</Text>
|
118
|
-
{playlist.peer.isLocal ? (
|
119
|
-
<Text
|
120
|
-
variant="sm"
|
121
|
-
css={{ color: '$alert_error_default', cursor: 'pointer', ml: '$2' }}
|
122
|
-
onClick={e => {
|
123
|
-
e.preventDefault();
|
124
|
-
playlist.selection.playing ? playlist.pause() : playlist.play(playlist.selection.id);
|
125
|
-
}}
|
126
|
-
>
|
127
|
-
{playlist.selection.playing ? 'Pause' : 'Play'}
|
128
|
-
</Text>
|
129
|
-
) : (
|
130
|
-
<Text
|
131
|
-
variant="sm"
|
132
|
-
css={{ color: '$alert_error_default', ml: '$2', cursor: 'pointer' }}
|
133
|
-
onClick={e => {
|
134
|
-
e.preventDefault();
|
135
|
-
playlist.setVolume(!playlist.track.volume ? 100 : 0);
|
136
|
-
}}
|
137
|
-
>
|
138
|
-
{playlist.track.volume === 0 ? 'Unmute' : 'Mute'}
|
139
|
-
</Text>
|
140
|
-
)}
|
141
|
-
</Dropdown.Item>
|
142
|
-
)}
|
143
89
|
{!isAudioshareInactive && (
|
144
90
|
<Dropdown.Item css={{ color: '$on_primary_high' }}>
|
145
91
|
<MusicIcon width={24} height={24} />
|
@@ -166,14 +112,6 @@ export const AdditionalRoomState = () => {
|
|
166
112
|
</Text>
|
167
113
|
</Dropdown.Item>
|
168
114
|
)}
|
169
|
-
{shouldShowVideoState && (
|
170
|
-
<Dropdown.Item css={{ color: '$on_primary_high' }}>
|
171
|
-
<VideoPlayerIcon width={24} height={24} />
|
172
|
-
<Text variant="sm" css={{ ml: '$2', flex: '1 1 0' }}>
|
173
|
-
{`Shared by: ${peerSharingPlaylist.id === localPeerID ? 'You' : peerSharingPlaylist.name}`}
|
174
|
-
</Text>
|
175
|
-
</Dropdown.Item>
|
176
|
-
)}
|
177
115
|
</Dropdown.Content>
|
178
116
|
</Dropdown.Root>
|
179
117
|
);
|
@@ -49,11 +49,11 @@ export const ScreenshareLayout = ({ peers, onPageChange, onPageSize, edgeToEdge
|
|
49
49
|
};
|
50
50
|
}, [isMobile]); // eslint-disable-line react-hooks/exhaustive-deps
|
51
51
|
useEffect(() => {
|
52
|
-
setActiveScreenSharePeer(
|
52
|
+
setActiveScreenSharePeer(activeSharePeer?.id);
|
53
53
|
return () => {
|
54
54
|
setActiveScreenSharePeer('');
|
55
55
|
};
|
56
|
-
}, [activeSharePeer?.id,
|
56
|
+
}, [activeSharePeer?.id, setActiveScreenSharePeer]);
|
57
57
|
|
58
58
|
return (
|
59
59
|
<ProminenceLayout.Root edgeToEdge={edgeToEdge} hasSidebar={hasSidebar}>
|
@@ -1,9 +0,0 @@
|
|
1
|
-
export declare const hmsStore: import("@100mslive/hms-video-store").HMSStoreWrapper<{
|
2
|
-
sessionStore: Record<string, any>;
|
3
|
-
}>;
|
4
|
-
export declare const hmsActions: import("@100mslive/hms-video-store").HMSActions<{
|
5
|
-
sessionStore: Record<string, any>;
|
6
|
-
}>;
|
7
|
-
export declare const hmsNotifications: import("@100mslive/hms-video-store").HMSNotifications;
|
8
|
-
export declare const hmsStats: import("@100mslive/hms-video-store").HMSStatsStoreWrapper;
|
9
|
-
export declare const hmsDiagnostics: import("@100mslive/hms-video-store").HMSDiagnosticsInterface;
|