@100mslive/roomkit-react 0.2.3-alpha.3 → 0.2.4-alpha.0
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/{HLSView-IUF7RGVF.js → HLSView-5I6UAYPZ.js} +6 -6
- package/dist/HLSView-5I6UAYPZ.js.map +7 -0
- package/dist/Prebuilt/common/constants.d.ts +1 -0
- package/dist/Prebuilt/components/Connection/TileConnection.d.ts +2 -3
- package/dist/Prebuilt/components/InsetTile.d.ts +3 -1
- package/dist/Prebuilt/components/LayoutModeSelector.d.ts +2 -0
- package/dist/Prebuilt/components/MoreSettings/ChangeNameContent.d.ts +10 -0
- package/dist/Prebuilt/components/MoreSettings/ChangeNameModal.d.ts +5 -0
- package/dist/Prebuilt/components/Polls/CreatePollQuiz/PollsQuizMenu.d.ts +2 -0
- package/dist/Prebuilt/components/Polls/CreateQuestions/SavedQuestion.d.ts +1 -2
- package/dist/Prebuilt/components/Polls/common/StatusIndicator.d.ts +4 -3
- package/dist/Prebuilt/components/Polls/common/constants.d.ts +5 -0
- package/dist/Prebuilt/components/ScreenshareDisplay.d.ts +2 -0
- package/dist/Prebuilt/components/ScreenshareTile.d.ts +7 -0
- package/dist/Prebuilt/components/SecondaryTiles.d.ts +1 -1
- package/dist/Prebuilt/components/Settings/LayoutSettings.d.ts +11 -0
- package/dist/Prebuilt/components/Settings/NotificationSettings.d.ts +2 -0
- package/dist/Prebuilt/components/Settings/SwitchWithLabel.d.ts +10 -0
- package/dist/Prebuilt/components/Settings/common.d.ts +878 -0
- package/dist/Prebuilt/components/TileMenu/TileMenu.d.ts +14 -0
- package/dist/Prebuilt/components/TileMenu/TileMenuContent.d.ts +7 -7
- package/dist/Prebuilt/components/VideoLayouts/ProminenceLayout.d.ts +4 -2
- package/dist/Prebuilt/components/VideoLayouts/interface.d.ts +1 -0
- package/dist/Prebuilt/components/VideoTile.d.ts +19 -0
- package/dist/Prebuilt/components/hooks/useDropdownList.d.ts +4 -0
- package/dist/{chunk-2UXI3OG5.js → chunk-OGCNZHHH.js} +1328 -1097
- package/dist/chunk-OGCNZHHH.js.map +7 -0
- package/dist/index.cjs.js +1826 -1575
- package/dist/index.cjs.js.map +4 -4
- package/dist/index.js +1 -1
- package/dist/meta.cjs.json +458 -293
- package/dist/meta.esbuild.json +470 -305
- package/package.json +6 -6
- package/src/Pagination/StyledPagination.tsx +1 -0
- package/src/Popover/index.tsx +8 -1
- package/src/Prebuilt/common/constants.ts +1 -0
- package/src/Prebuilt/components/AppData/AppData.tsx +2 -0
- package/src/Prebuilt/components/AppData/useUISettings.js +1 -1
- package/src/Prebuilt/components/Connection/TileConnection.tsx +13 -6
- package/src/Prebuilt/components/HlsStatsOverlay.jsx +2 -2
- package/src/Prebuilt/components/InsetTile.tsx +13 -6
- package/src/Prebuilt/components/LayoutModeSelector.tsx +106 -0
- package/src/Prebuilt/components/MoreSettings/{ChangeNameContent.jsx → ChangeNameContent.tsx} +10 -2
- package/src/Prebuilt/components/MoreSettings/{ChangeNameModal.jsx → ChangeNameModal.tsx} +14 -5
- package/src/Prebuilt/components/MoreSettings/SplitComponents/DesktopOptions.tsx +2 -2
- package/src/Prebuilt/components/MoreSettings/SplitComponents/MwebOptions.tsx +2 -2
- package/src/Prebuilt/components/Notifications/Notifications.tsx +0 -1
- package/src/Prebuilt/components/Playlist/VideoPlayer.jsx +1 -1
- package/src/Prebuilt/components/Polls/CreatePollQuiz/{PollsQuizMenu.jsx → PollsQuizMenu.tsx} +54 -26
- package/src/Prebuilt/components/Polls/CreateQuestions/CreateQuestions.jsx +21 -31
- package/src/Prebuilt/components/Polls/CreateQuestions/SavedQuestion.tsx +3 -17
- package/src/Prebuilt/components/Polls/Voting/LeaderboardSummary.tsx +1 -1
- package/src/Prebuilt/components/Polls/Voting/QuestionCard.jsx +1 -10
- package/src/Prebuilt/components/Polls/Voting/Voting.tsx +1 -3
- package/src/Prebuilt/components/Polls/common/StatusIndicator.tsx +12 -3
- package/src/Prebuilt/components/Polls/common/constants.ts +5 -0
- package/src/Prebuilt/components/Preview/PreviewForm.tsx +2 -2
- package/src/Prebuilt/components/PreviousRoleInMetadata.tsx +1 -1
- package/src/Prebuilt/components/{ScreenshareTile.jsx → ScreenshareTile.tsx} +39 -6
- package/src/Prebuilt/components/SecondaryTiles.tsx +36 -4
- package/src/Prebuilt/components/Settings/DeviceSettings.jsx +1 -1
- package/src/Prebuilt/components/Settings/{LayoutSettings.jsx → LayoutSettings.tsx} +58 -14
- package/src/Prebuilt/components/Settings/{NotificationSettings.jsx → NotificationSettings.tsx} +14 -3
- package/src/Prebuilt/components/Settings/SettingsModal.jsx +32 -6
- package/src/Prebuilt/components/Settings/{SwitchWithLabel.jsx → SwitchWithLabel.tsx} +15 -1
- package/src/Prebuilt/components/Settings/common.ts +16 -0
- package/src/Prebuilt/components/TileMenu/{TileMenu.jsx → TileMenu.tsx} +12 -4
- package/src/Prebuilt/components/TileMenu/TileMenuContent.tsx +12 -10
- package/src/Prebuilt/components/VideoLayouts/ProminenceLayout.tsx +29 -14
- package/src/Prebuilt/components/VideoLayouts/RoleProminence.tsx +12 -2
- package/src/Prebuilt/components/VideoLayouts/ScreenshareLayout.tsx +20 -5
- package/src/Prebuilt/components/VideoLayouts/interface.ts +1 -0
- package/src/Prebuilt/components/{VideoTile.jsx → VideoTile.tsx} +57 -44
- package/src/Prebuilt/components/VirtualBackground/VBPicker.tsx +2 -2
- package/src/Prebuilt/components/hooks/{useDropdownList.jsx → useDropdownList.ts} +2 -1
- package/src/Prebuilt/components/pdfAnnotator/shareScreenOptions.jsx +1 -1
- package/src/Prebuilt/layouts/HLSView.jsx +2 -2
- package/src/Prebuilt/layouts/SidePane.tsx +8 -4
- package/src/Prebuilt/layouts/VideoStreamingSection.tsx +1 -1
- package/src/VideoTile/StyledVideoTile.tsx +4 -4
- package/dist/HLSView-IUF7RGVF.js.map +0 -7
- package/dist/chunk-2UXI3OG5.js.map +0 -7
- package/src/Prebuilt/components/Settings/common.js +0 -41
- /package/src/Prebuilt/components/{ScreenshareDisplay.jsx → ScreenshareDisplay.tsx} +0 -0
package/package.json
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
"prebuilt",
|
11
11
|
"roomkit"
|
12
12
|
],
|
13
|
-
"version": "0.2.
|
13
|
+
"version": "0.2.4-alpha.0",
|
14
14
|
"author": "100ms",
|
15
15
|
"license": "MIT",
|
16
16
|
"repository": {
|
@@ -82,10 +82,10 @@
|
|
82
82
|
"react": ">=17.0.2 <19.0.0"
|
83
83
|
},
|
84
84
|
"dependencies": {
|
85
|
-
"@100mslive/hls-player": "0.2.
|
86
|
-
"@100mslive/hms-virtual-background": "1.12.
|
87
|
-
"@100mslive/react-icons": "0.9.
|
88
|
-
"@100mslive/react-sdk": "0.9.
|
85
|
+
"@100mslive/hls-player": "0.2.4-alpha.0",
|
86
|
+
"@100mslive/hms-virtual-background": "1.12.4-alpha.0",
|
87
|
+
"@100mslive/react-icons": "0.9.4-alpha.0",
|
88
|
+
"@100mslive/react-sdk": "0.9.4-alpha.0",
|
89
89
|
"@100mslive/types-prebuilt": "0.12.6",
|
90
90
|
"@emoji-mart/data": "^1.0.6",
|
91
91
|
"@emoji-mart/react": "^1.0.1",
|
@@ -120,5 +120,5 @@
|
|
120
120
|
"uuid": "^8.3.2",
|
121
121
|
"worker-timers": "^7.0.40"
|
122
122
|
},
|
123
|
-
"gitHead": "
|
123
|
+
"gitHead": "fd3b1d5dbaa21c6789e6a8ce192a20f6ae416ee5"
|
124
124
|
}
|
package/src/Popover/index.tsx
CHANGED
@@ -15,7 +15,14 @@ const StyledArrow = styled(Arrow, {
|
|
15
15
|
...popoverAnimation,
|
16
16
|
});
|
17
17
|
|
18
|
-
const StyledTrigger = styled(Trigger, {
|
18
|
+
const StyledTrigger = styled(Trigger, {
|
19
|
+
'&:hover': {
|
20
|
+
cursor: 'pointer',
|
21
|
+
},
|
22
|
+
'&:focus-visible': {
|
23
|
+
boxShadow: '0 0 0 3px $colors$primary_default',
|
24
|
+
},
|
25
|
+
});
|
19
26
|
|
20
27
|
export const Popover = {
|
21
28
|
Root,
|
@@ -52,6 +52,7 @@ export const UI_SETTINGS = {
|
|
52
52
|
isAudioOnly: 'isAudioOnly',
|
53
53
|
maxTileCount: 'maxTileCount',
|
54
54
|
uiViewMode: 'uiViewMode',
|
55
|
+
layoutMode: 'layoutMode',
|
55
56
|
showStatsOnTiles: 'showStatsOnTiles',
|
56
57
|
enableAmbientMusic: 'enableAmbientMusic',
|
57
58
|
mirrorLocalVideo: 'mirrorLocalVideo',
|
@@ -9,6 +9,7 @@ import {
|
|
9
9
|
useHMSStore,
|
10
10
|
useRecordingStreaming,
|
11
11
|
} from '@100mslive/react-sdk';
|
12
|
+
import { LayoutMode } from '../Settings/LayoutSettings';
|
12
13
|
//@ts-ignore
|
13
14
|
import { UserPreferencesKeys, useUserPreferences } from '../hooks/useUserPreferences';
|
14
15
|
// @ts-ignore
|
@@ -33,6 +34,7 @@ const initialAppData = {
|
|
33
34
|
[UI_SETTINGS.enableAmbientMusic]: false,
|
34
35
|
[UI_SETTINGS.uiViewMode]: UI_MODE_GRID,
|
35
36
|
[UI_SETTINGS.mirrorLocalVideo]: true,
|
37
|
+
[UI_SETTINGS.layoutMode]: LayoutMode.GALLERY,
|
36
38
|
},
|
37
39
|
[APP_DATA.subscribedNotifications]: {
|
38
40
|
PEER_JOINED: false,
|
@@ -165,7 +165,7 @@ const useSetAppData = ({ key1, key2 }) => {
|
|
165
165
|
|
166
166
|
export const useShowPolls = () => {
|
167
167
|
const permissions = useHMSStore(selectPermissions);
|
168
|
-
const polls = useHMSStore(selectPolls)
|
168
|
+
const polls = useHMSStore(selectPolls);
|
169
169
|
|
170
170
|
const showPolls = useMemo(() => {
|
171
171
|
return permissions?.pollWrite || (permissions?.pollRead && polls?.length > 0);
|
@@ -1,28 +1,35 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import {
|
2
|
+
import { selectScreenShareByPeerID, selectSessionStore, useHMSStore } from '@100mslive/react-sdk';
|
3
|
+
import { PinIcon, ShareScreenIcon, SpotlightIcon } from '@100mslive/react-icons';
|
3
4
|
import { Flex, styled, Text, textEllipsis } from '../../..';
|
4
5
|
import { ConnectionIndicator } from './ConnectionIndicator';
|
6
|
+
import { SESSION_STORE_KEY } from '../../common/constants';
|
5
7
|
|
6
8
|
const TileConnection = ({
|
7
9
|
name,
|
8
10
|
peerId,
|
9
11
|
hideLabel,
|
10
12
|
width,
|
11
|
-
spotlighted,
|
12
13
|
pinned,
|
13
14
|
}: {
|
14
15
|
name: string;
|
15
16
|
peerId: string;
|
16
17
|
hideLabel: boolean;
|
17
|
-
width?: number;
|
18
|
-
spotlighted?: boolean;
|
18
|
+
width?: string | number;
|
19
19
|
pinned?: boolean;
|
20
20
|
}) => {
|
21
|
+
const spotlighted = useHMSStore(selectSessionStore(SESSION_STORE_KEY.SPOTLIGHT)) === peerId;
|
22
|
+
const isPeerScreenSharing = !!useHMSStore(selectScreenShareByPeerID(peerId));
|
21
23
|
return (
|
22
24
|
<Wrapper>
|
23
25
|
{!hideLabel ? (
|
24
26
|
<>
|
25
27
|
<Flex align="center">
|
28
|
+
{isPeerScreenSharing && (
|
29
|
+
<IconWrapper>
|
30
|
+
<ShareScreenIcon width="15" height="15" />
|
31
|
+
</IconWrapper>
|
32
|
+
)}
|
26
33
|
{pinned && (
|
27
34
|
<IconWrapper>
|
28
35
|
<PinIcon width="15" height="15" />
|
@@ -37,7 +44,7 @@ const TileConnection = ({
|
|
37
44
|
css={{
|
38
45
|
c: '$on_surface_high',
|
39
46
|
verticalAlign: 'baseline',
|
40
|
-
...(width ? textEllipsis(width - 60) : {}),
|
47
|
+
...(width ? textEllipsis((width as number) - 60) : {}),
|
41
48
|
}}
|
42
49
|
variant="xs"
|
43
50
|
>
|
@@ -51,7 +58,7 @@ const TileConnection = ({
|
|
51
58
|
);
|
52
59
|
};
|
53
60
|
|
54
|
-
const IconWrapper = styled('div', { c: '$on_surface_high', ml: '$3', mt: '$1' });
|
61
|
+
const IconWrapper = styled('div', { c: '$on_surface_high', ml: '$3', mt: '$1', display: 'flex' });
|
55
62
|
|
56
63
|
const Wrapper = styled('div', {
|
57
64
|
display: 'flex',
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import React, { memo } from 'react';
|
2
|
-
import {
|
2
|
+
import { CrossIcon } from '@100mslive/react-icons';
|
3
3
|
import { Flex } from '../../Layout';
|
4
4
|
import { Text } from '../../Text';
|
5
5
|
import IconButton from '../IconButton';
|
@@ -19,7 +19,7 @@ export function HlsStatsOverlay({ hlsStatsState, onClose }) {
|
|
19
19
|
direction="column"
|
20
20
|
>
|
21
21
|
<IconButton css={{ position: 'absolute', top: '$2', right: '$2' }} onClick={onClose}>
|
22
|
-
<
|
22
|
+
<CrossIcon />
|
23
23
|
</IconButton>
|
24
24
|
<HlsStatsRow label="URL">
|
25
25
|
<Flex align="center">
|
@@ -1,7 +1,13 @@
|
|
1
1
|
import React, { useEffect, useRef } from 'react';
|
2
2
|
import Draggable from 'react-draggable';
|
3
3
|
import { useMedia } from 'react-use';
|
4
|
-
import {
|
4
|
+
import {
|
5
|
+
selectIsAllowedToPublish,
|
6
|
+
selectLocalPeer,
|
7
|
+
selectPeerByID,
|
8
|
+
selectVideoTrackByID,
|
9
|
+
useHMSStore,
|
10
|
+
} from '@100mslive/react-sdk';
|
5
11
|
import { ExpandIcon } from '@100mslive/react-icons';
|
6
12
|
import { Box, Flex } from '../../Layout';
|
7
13
|
import { Text } from '../../Text';
|
@@ -39,12 +45,13 @@ const insetMaxWidthPx = 240;
|
|
39
45
|
const defaultMobileAspectRatio = 9 / 16;
|
40
46
|
const desktopAspectRatio = 1 / defaultMobileAspectRatio;
|
41
47
|
|
42
|
-
export const InsetTile = () => {
|
48
|
+
export const InsetTile = ({ peerId }: { peerId?: string }) => {
|
43
49
|
const isMobile = useMedia(cssConfig.media.md);
|
44
50
|
const isLandscape = useMedia(cssConfig.media.ls);
|
45
|
-
const
|
51
|
+
const selector = peerId ? selectPeerByID(peerId) : selectLocalPeer;
|
52
|
+
const peer = useHMSStore(selector);
|
46
53
|
const [minimised, setMinimised] = useSetAppDataByKey(APP_DATA.minimiseInset);
|
47
|
-
const videoTrack = useHMSStore(selectVideoTrackByID(
|
54
|
+
const videoTrack = useHMSStore(selectVideoTrackByID(peer?.videoTrack));
|
48
55
|
const isAllowedToPublish = useHMSStore(selectIsAllowedToPublish);
|
49
56
|
const videoTileProps = useVideoTileContext();
|
50
57
|
let aspectRatio = isMobile ? defaultMobileAspectRatio : desktopAspectRatio;
|
@@ -108,8 +115,8 @@ export const InsetTile = () => {
|
|
108
115
|
<MinimisedTile setMinimised={setMinimised} />
|
109
116
|
) : (
|
110
117
|
<VideoTile
|
111
|
-
peerId={
|
112
|
-
|
118
|
+
peerId={peer?.id}
|
119
|
+
trackId={peer?.videoTrack}
|
113
120
|
rootCSS={{
|
114
121
|
size: '100%',
|
115
122
|
padding: 0,
|
@@ -0,0 +1,106 @@
|
|
1
|
+
import React, { useState } from 'react';
|
2
|
+
import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from '@100mslive/react-icons';
|
3
|
+
import { LayoutMode, LayoutModeIconMapping, LayoutModeKeys } from './Settings/LayoutSettings';
|
4
|
+
import { Flex } from '../../Layout';
|
5
|
+
import { Popover } from '../../Popover';
|
6
|
+
import { Text } from '../../Text';
|
7
|
+
// @ts-ignore: No implicit Any
|
8
|
+
import { useSetUiSettings } from '../components/AppData/useUISettings';
|
9
|
+
import { UI_SETTINGS } from '../common/constants';
|
10
|
+
|
11
|
+
export const LayoutModeSelector = () => {
|
12
|
+
const [open, setOpen] = useState(false);
|
13
|
+
const [layoutMode, setLayoutMode] = useSetUiSettings(UI_SETTINGS.layoutMode);
|
14
|
+
|
15
|
+
return (
|
16
|
+
<Popover.Root open={open} onOpenChange={setOpen}>
|
17
|
+
<Popover.Trigger asChild>
|
18
|
+
<Flex
|
19
|
+
align="center"
|
20
|
+
css={{
|
21
|
+
gap: '$4',
|
22
|
+
color: open ? '$on_surface_low' : '$on_surface_medium',
|
23
|
+
r: '$1',
|
24
|
+
p: '$2 $4',
|
25
|
+
height: '100%',
|
26
|
+
}}
|
27
|
+
>
|
28
|
+
<Flex
|
29
|
+
align="center"
|
30
|
+
justify="center"
|
31
|
+
css={{
|
32
|
+
color: 'inherit',
|
33
|
+
'& > svg': {
|
34
|
+
w: '$9',
|
35
|
+
h: '$9',
|
36
|
+
},
|
37
|
+
}}
|
38
|
+
>
|
39
|
+
{LayoutModeIconMapping[layoutMode as LayoutModeKeys]}
|
40
|
+
</Flex>
|
41
|
+
<Text variant="caption" css={{ color: 'inherit', lineHeight: '$sm' }}>
|
42
|
+
{layoutMode}
|
43
|
+
</Text>
|
44
|
+
{open ? <ChevronUpIcon width={16} height={16} /> : <ChevronDownIcon width={16} height={16} />}
|
45
|
+
</Flex>
|
46
|
+
</Popover.Trigger>
|
47
|
+
<Popover.Content
|
48
|
+
css={{
|
49
|
+
w: '10.75rem',
|
50
|
+
r: '$1',
|
51
|
+
py: '$4',
|
52
|
+
px: 0,
|
53
|
+
backgroundColor: '$surface_default',
|
54
|
+
overflowY: 'auto',
|
55
|
+
boxShadow: '0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23)',
|
56
|
+
fontFamily: '$sans',
|
57
|
+
color: '$on_surface_high',
|
58
|
+
}}
|
59
|
+
side="bottom"
|
60
|
+
sideOffset={8}
|
61
|
+
align="end"
|
62
|
+
>
|
63
|
+
{Object.keys(LayoutMode).map(key => {
|
64
|
+
const value = LayoutMode[key as LayoutModeKeys];
|
65
|
+
return (
|
66
|
+
<Flex
|
67
|
+
key={key}
|
68
|
+
onClick={() => setLayoutMode(value)}
|
69
|
+
align="center"
|
70
|
+
css={{
|
71
|
+
gap: '$4',
|
72
|
+
borderBottom: '1px solid $border_bright',
|
73
|
+
p: '$8',
|
74
|
+
'&:hover': {
|
75
|
+
cursor: 'pointer',
|
76
|
+
bg: '$surface_bright',
|
77
|
+
},
|
78
|
+
'&:focus-visible': {
|
79
|
+
bg: '$surface_bright',
|
80
|
+
},
|
81
|
+
}}
|
82
|
+
>
|
83
|
+
<Flex
|
84
|
+
align="center"
|
85
|
+
justify="center"
|
86
|
+
css={{
|
87
|
+
color: '$on_surface_medium',
|
88
|
+
'& > svg': {
|
89
|
+
w: '$9',
|
90
|
+
h: '$9',
|
91
|
+
},
|
92
|
+
}}
|
93
|
+
>
|
94
|
+
{LayoutModeIconMapping[value]}
|
95
|
+
</Flex>
|
96
|
+
<Text variant="caption" css={{ lineHeight: '$sm' }}>
|
97
|
+
{value}
|
98
|
+
</Text>
|
99
|
+
{value === layoutMode ? <CheckIcon width={20} height={20} style={{ marginLeft: 'auto' }} /> : null}
|
100
|
+
</Flex>
|
101
|
+
);
|
102
|
+
})}
|
103
|
+
</Popover.Content>
|
104
|
+
</Popover.Root>
|
105
|
+
);
|
106
|
+
};
|
package/src/Prebuilt/components/MoreSettings/{ChangeNameContent.jsx → ChangeNameContent.tsx}
RENAMED
@@ -13,6 +13,14 @@ export const ChangeNameContent = ({
|
|
13
13
|
isMobile,
|
14
14
|
onExit,
|
15
15
|
onBackClick,
|
16
|
+
}: {
|
17
|
+
changeName: () => Promise<void>;
|
18
|
+
setCurrentName: (name: string) => void;
|
19
|
+
currentName?: string;
|
20
|
+
localPeerName?: string;
|
21
|
+
isMobile: boolean;
|
22
|
+
onExit: () => void;
|
23
|
+
onBackClick: () => void;
|
16
24
|
}) => {
|
17
25
|
return (
|
18
26
|
<form
|
@@ -56,7 +64,7 @@ export const ChangeNameContent = ({
|
|
56
64
|
required
|
57
65
|
data-testid="change_name_field"
|
58
66
|
onKeyDown={async e => {
|
59
|
-
if (e.key === 'Enter' && currentName.trim().length > 0 && currentName !== localPeerName) {
|
67
|
+
if (e.key === 'Enter' && currentName && currentName.trim().length > 0 && currentName !== localPeerName) {
|
60
68
|
e.preventDefault();
|
61
69
|
if (isMobile) {
|
62
70
|
return;
|
@@ -94,7 +102,7 @@ export const ChangeNameContent = ({
|
|
94
102
|
variant="primary"
|
95
103
|
css={{ width: '100%' }}
|
96
104
|
type="submit"
|
97
|
-
disabled={!currentName
|
105
|
+
disabled={!currentName?.trim() || currentName?.trim() === localPeerName}
|
98
106
|
data-testid="popup_change_btn"
|
99
107
|
>
|
100
108
|
Change
|
@@ -1,13 +1,22 @@
|
|
1
1
|
import React, { useState } from 'react';
|
2
2
|
import { useMedia } from 'react-use';
|
3
3
|
import { selectLocalPeerName, useHMSActions, useHMSStore } from '@100mslive/react-sdk';
|
4
|
-
import { config as cssConfig, Dialog } from '
|
4
|
+
import { config as cssConfig, Dialog } from '../../..';
|
5
5
|
import { Sheet } from '../../../Sheet';
|
6
|
+
// @ts-ignore: No implicit Any
|
6
7
|
import { ToastManager } from '../Toast/ToastManager';
|
8
|
+
// @ts-ignore: No implicit Any
|
7
9
|
import { ChangeNameContent } from './ChangeNameContent';
|
10
|
+
// @ts-ignore: No implicit Any
|
8
11
|
import { UserPreferencesKeys, useUserPreferences } from '../hooks/useUserPreferences';
|
9
12
|
|
10
|
-
export const ChangeNameModal = ({
|
13
|
+
export const ChangeNameModal = ({
|
14
|
+
onOpenChange,
|
15
|
+
openParentSheet = undefined,
|
16
|
+
}: {
|
17
|
+
onOpenChange: (value: boolean) => void;
|
18
|
+
openParentSheet?: () => void;
|
19
|
+
}) => {
|
11
20
|
const [previewPreference, setPreviewPreference] = useUserPreferences(UserPreferencesKeys.PREVIEW);
|
12
21
|
const hmsActions = useHMSActions();
|
13
22
|
const localPeerName = useHMSStore(selectLocalPeerName);
|
@@ -15,7 +24,7 @@ export const ChangeNameModal = ({ onOpenChange, openParentSheet = null }) => {
|
|
15
24
|
const isMobile = useMedia(cssConfig.media.md);
|
16
25
|
|
17
26
|
const changeName = async () => {
|
18
|
-
const name = currentName
|
27
|
+
const name = currentName?.trim() || '';
|
19
28
|
if (!name || name === localPeerName) {
|
20
29
|
return;
|
21
30
|
}
|
@@ -27,7 +36,7 @@ export const ChangeNameModal = ({ onOpenChange, openParentSheet = null }) => {
|
|
27
36
|
});
|
28
37
|
} catch (error) {
|
29
38
|
console.error('failed to update name', error);
|
30
|
-
ToastManager.addToast({ title: error.message });
|
39
|
+
ToastManager.addToast({ title: (error as Error).message });
|
31
40
|
} finally {
|
32
41
|
onOpenChange(false);
|
33
42
|
}
|
@@ -42,7 +51,7 @@ export const ChangeNameModal = ({ onOpenChange, openParentSheet = null }) => {
|
|
42
51
|
onExit: () => onOpenChange(false),
|
43
52
|
onBackClick: () => {
|
44
53
|
onOpenChange(false);
|
45
|
-
openParentSheet();
|
54
|
+
openParentSheet?.();
|
46
55
|
},
|
47
56
|
};
|
48
57
|
|
@@ -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,
|
9
|
+
import { BrbIcon, CheckIcon, HamburgerMenuIcon, 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';
|
@@ -88,7 +88,7 @@ export const DesktopOptions = ({
|
|
88
88
|
<Tooltip title="More options">
|
89
89
|
<Dropdown.Trigger asChild data-testid="more_settings_btn">
|
90
90
|
<IconButton>
|
91
|
-
<
|
91
|
+
<HamburgerMenuIcon />
|
92
92
|
</IconButton>
|
93
93
|
</Dropdown.Trigger>
|
94
94
|
</Tooltip>
|
@@ -13,8 +13,8 @@ import {
|
|
13
13
|
import {
|
14
14
|
BrbIcon,
|
15
15
|
CrossIcon,
|
16
|
-
DragHandleIcon,
|
17
16
|
EmojiIcon,
|
17
|
+
HamburgerMenuIcon,
|
18
18
|
HandIcon,
|
19
19
|
HandRaiseSlashedIcon,
|
20
20
|
PeopleIcon,
|
@@ -119,7 +119,7 @@ export const MwebOptions = ({
|
|
119
119
|
<Tooltip title="More options">
|
120
120
|
<Sheet.Trigger asChild data-testid="more_settings_btn">
|
121
121
|
<IconButton>
|
122
|
-
<
|
122
|
+
<HamburgerMenuIcon />
|
123
123
|
</IconButton>
|
124
124
|
</Sheet.Trigger>
|
125
125
|
</Tooltip>
|
@@ -36,7 +36,6 @@ import { usePollViewToggle } from '../AppData/useSidepane';
|
|
36
36
|
import { useIsNotificationDisabled, useSubscribedNotifications } from '../AppData/useUISettings';
|
37
37
|
// @ts-ignore: No implicit Any
|
38
38
|
import { getMetadata } from '../../common/utils';
|
39
|
-
// @ts-ignore: No implicit Any
|
40
39
|
import { ROLE_CHANGE_DECLINED } from '../../common/constants';
|
41
40
|
|
42
41
|
const pollToastKey: Record<string, string> = {};
|
package/src/Prebuilt/components/Polls/CreatePollQuiz/{PollsQuizMenu.jsx → PollsQuizMenu.tsx}
RENAMED
@@ -1,17 +1,21 @@
|
|
1
|
-
// @ts-check
|
2
1
|
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
3
2
|
import {
|
3
|
+
HMSPoll,
|
4
|
+
HMSPollState,
|
4
5
|
selectLocalPeerRoleName,
|
5
6
|
selectPermissions,
|
6
|
-
selectPolls,
|
7
7
|
useHMSActions,
|
8
8
|
useHMSStore,
|
9
9
|
} from '@100mslive/react-sdk';
|
10
10
|
import { QuestionIcon, StatsIcon } from '@100mslive/react-icons';
|
11
|
-
import { Button, Flex, Input, Switch, Text } from '
|
11
|
+
import { Button, Flex, Input, Switch, Text } from '../../../..';
|
12
|
+
// @ts-ignore
|
12
13
|
import { Container, ContentHeader, ErrorText } from '../../Streaming/Common';
|
14
|
+
// @ts-ignore
|
13
15
|
import { usePollViewToggle } from '../../AppData/useSidepane';
|
16
|
+
// @ts-ignore
|
14
17
|
import { usePollViewState } from '../../AppData/useUISettings';
|
18
|
+
// @ts-ignore
|
15
19
|
import { isValidTextInput } from '../../../common/utils';
|
16
20
|
import { StatusIndicator } from '../common/StatusIndicator';
|
17
21
|
import { INTERACTION_TYPE, POLL_STATE, POLL_VIEWS } from '../../../common/constants';
|
@@ -31,7 +35,17 @@ export const PollsQuizMenu = () => {
|
|
31
35
|
);
|
32
36
|
};
|
33
37
|
|
34
|
-
function InteractionSelectionCard({
|
38
|
+
function InteractionSelectionCard({
|
39
|
+
title,
|
40
|
+
icon,
|
41
|
+
active,
|
42
|
+
onClick,
|
43
|
+
}: {
|
44
|
+
title: string;
|
45
|
+
icon: React.JSX.Element;
|
46
|
+
active: boolean;
|
47
|
+
onClick: () => void;
|
48
|
+
}) {
|
35
49
|
const activeBorderStyle = active ? '$space$px solid $primary_default' : '$space$px solid $border_bright';
|
36
50
|
return (
|
37
51
|
<Flex
|
@@ -73,7 +87,7 @@ const AddMenu = () => {
|
|
73
87
|
const { setPollState } = usePollViewState();
|
74
88
|
const [interactionType, setInteractionType] = useState(INTERACTION_TYPE.POLL);
|
75
89
|
|
76
|
-
const inputRef = useRef(null);
|
90
|
+
const inputRef = useRef<HTMLInputElement>(null);
|
77
91
|
|
78
92
|
useEffect(() => {
|
79
93
|
if (inputRef.current) {
|
@@ -81,7 +95,7 @@ const AddMenu = () => {
|
|
81
95
|
}
|
82
96
|
}, [interactionType]);
|
83
97
|
|
84
|
-
const handleCreate = id => {
|
98
|
+
const handleCreate = (id: string) => {
|
85
99
|
setPollState({
|
86
100
|
[POLL_STATE.pollInView]: id,
|
87
101
|
[POLL_STATE.view]: POLL_VIEWS.CREATE_QUESTIONS,
|
@@ -99,8 +113,6 @@ const AddMenu = () => {
|
|
99
113
|
return false;
|
100
114
|
}
|
101
115
|
}, [title]);
|
102
|
-
// const [timer, setTimer] = useState(10);
|
103
|
-
// const [showTimerDropDown, setShowTimerDropDown] = useState(false);
|
104
116
|
|
105
117
|
return (
|
106
118
|
<>
|
@@ -165,8 +177,8 @@ const AddMenu = () => {
|
|
165
177
|
title,
|
166
178
|
anonymous: false,
|
167
179
|
rolesThatCanViewResponses: hideVoteCount && localPeerRoleName ? [localPeerRoleName] : undefined,
|
180
|
+
// @ts-ignore
|
168
181
|
type: interactionType.toLowerCase(),
|
169
|
-
// duration: showTimerDropDown ? timer : undefined,
|
170
182
|
})
|
171
183
|
.then(() => handleCreate(id))
|
172
184
|
.catch(err => setError(err.message));
|
@@ -181,11 +193,26 @@ const AddMenu = () => {
|
|
181
193
|
};
|
182
194
|
|
183
195
|
const PrevMenu = () => {
|
184
|
-
|
185
|
-
const polls =
|
186
|
-
|
187
|
-
|
188
|
-
|
196
|
+
const hmsActions = useHMSActions();
|
197
|
+
const [polls, setPolls] = useState<HMSPoll[]>([]);
|
198
|
+
|
199
|
+
useEffect(() => {
|
200
|
+
const listPolls = async () => {
|
201
|
+
const polls = await hmsActions.interactivityCenter.getPolls();
|
202
|
+
const sortedPolls = await polls
|
203
|
+
?.sort((a, b) => (b.createdAt?.getTime() || 0) - (a.createdAt?.getTime() || 0))
|
204
|
+
?.sort((a, b) => (b.state === 'started' ? 1 : 0) - (a.state === 'started' ? 1 : 0));
|
205
|
+
return sortedPolls;
|
206
|
+
};
|
207
|
+
|
208
|
+
const updatePolls = async () => {
|
209
|
+
const sortedPolls = await listPolls();
|
210
|
+
setPolls(sortedPolls);
|
211
|
+
};
|
212
|
+
|
213
|
+
updatePolls();
|
214
|
+
}, [hmsActions.interactivityCenter]);
|
215
|
+
|
189
216
|
return polls?.length ? (
|
190
217
|
<Flex
|
191
218
|
css={{
|
@@ -199,8 +226,8 @@ const PrevMenu = () => {
|
|
199
226
|
Previous Polls and Quizzes
|
200
227
|
</Text>
|
201
228
|
<Flex direction="column" css={{ gap: '$10', mt: '$8' }}>
|
202
|
-
{polls
|
203
|
-
<InteractionCard key={poll.id} id={poll.id} title={poll.title}
|
229
|
+
{polls?.map(poll => (
|
230
|
+
<InteractionCard key={poll.id} id={poll.id} title={poll.title} status={poll.state} />
|
204
231
|
))}
|
205
232
|
</Flex>
|
206
233
|
</Flex>
|
@@ -208,26 +235,27 @@ const PrevMenu = () => {
|
|
208
235
|
) : null;
|
209
236
|
};
|
210
237
|
|
211
|
-
const InteractionCard = ({ id, title,
|
238
|
+
const InteractionCard = ({ id, title, status }: { id: string; title: string; status?: HMSPollState }) => {
|
212
239
|
const { setPollState } = usePollViewState();
|
213
240
|
|
214
|
-
const goToVote = id => {
|
215
|
-
setPollState({
|
216
|
-
[POLL_STATE.pollInView]: id,
|
217
|
-
[POLL_STATE.view]: POLL_VIEWS.VOTE,
|
218
|
-
});
|
219
|
-
};
|
220
|
-
|
221
241
|
return (
|
222
242
|
<Flex direction="column" css={{ backgroundColor: '$surface_bright', borderRadius: '$1', p: '$8' }}>
|
223
243
|
<Flex css={{ w: '100%', justifyContent: 'space-between', mb: '$sm' }}>
|
224
244
|
<Text variant="sub1" css={{ c: '$on_surface_high', fontWeight: '$semiBold' }}>
|
225
245
|
{title}
|
226
246
|
</Text>
|
227
|
-
<StatusIndicator
|
247
|
+
<StatusIndicator status={status} />
|
228
248
|
</Flex>
|
229
249
|
<Flex css={{ w: '100%', gap: '$4' }} justify="end">
|
230
|
-
<Button
|
250
|
+
<Button
|
251
|
+
variant="primary"
|
252
|
+
onClick={() =>
|
253
|
+
setPollState({
|
254
|
+
[POLL_STATE.pollInView]: id,
|
255
|
+
[POLL_STATE.view]: status === 'created' ? POLL_VIEWS.CREATE_QUESTIONS : POLL_VIEWS.VOTE,
|
256
|
+
})
|
257
|
+
}
|
258
|
+
>
|
231
259
|
View
|
232
260
|
</Button>
|
233
261
|
</Flex>
|