@100mslive/roomkit-react 0.1.8 → 0.1.9-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.
Files changed (139) hide show
  1. package/dist/{HLSView-DDGPZHA2.js → HLSView-U53QN3AC.js} +3 -3
  2. package/dist/Modal/Dialog.d.ts +402 -1706
  3. package/dist/Prebuilt/App.d.ts +5 -0
  4. package/dist/Prebuilt/AppContext.d.ts +1 -0
  5. package/dist/Prebuilt/AppStateContext.d.ts +16 -0
  6. package/dist/Prebuilt/components/ConferenceScreen.d.ts +2 -0
  7. package/dist/Prebuilt/components/Footer/PollsToggle.d.ts +2 -0
  8. package/dist/Prebuilt/components/LeaveScreen.d.ts +2 -0
  9. package/dist/Prebuilt/components/MwebLandscapePrompt.d.ts +2 -0
  10. package/dist/Prebuilt/components/Notifications/AutoplayBlockedModal.d.ts +2 -0
  11. package/dist/Prebuilt/components/Notifications/HLSFailureModal.d.ts +2 -0
  12. package/dist/Prebuilt/components/Notifications/InitErrorModal.d.ts +2 -0
  13. package/dist/Prebuilt/components/Notifications/Notifications.d.ts +2 -0
  14. package/dist/Prebuilt/components/Notifications/PeerNotifications.d.ts +1 -0
  15. package/dist/Prebuilt/components/Notifications/PermissionErrorModal.d.ts +2 -0
  16. package/dist/Prebuilt/components/Notifications/ReconnectNotifications.d.ts +2 -0
  17. package/dist/Prebuilt/components/Notifications/TrackBulkUnmuteModal.d.ts +2 -0
  18. package/dist/Prebuilt/components/Notifications/TrackNotifications.d.ts +1 -0
  19. package/dist/Prebuilt/components/Notifications/TrackUnmuteModal.d.ts +2 -0
  20. package/dist/Prebuilt/components/Polls/Polls.d.ts +2 -0
  21. package/dist/Prebuilt/components/Preview/PreviewJoin.d.ts +1 -2
  22. package/dist/Prebuilt/components/Preview/PreviewScreen.d.ts +2 -0
  23. package/dist/Prebuilt/components/hooks/useRedirectToLeave.d.ts +1 -1
  24. package/dist/{VirtualBackground-UVZJVOA2.js → VirtualBackground-PMLQPJB6.js} +3 -5
  25. package/dist/{VirtualBackground-UVZJVOA2.js.map → VirtualBackground-PMLQPJB6.js.map} +1 -1
  26. package/dist/chunk-ANQRGVIX.js +14441 -0
  27. package/dist/chunk-ANQRGVIX.js.map +7 -0
  28. package/dist/{chunk-6SQTFOK6.js → chunk-XQ2NRKIW.js} +66 -3
  29. package/dist/{chunk-6SQTFOK6.js.map → chunk-XQ2NRKIW.js.map} +4 -4
  30. package/dist/context/DialogContext.d.ts +6 -0
  31. package/dist/hooks/useDialogContainerSelector.d.ts +1 -0
  32. package/dist/index.cjs.js +10944 -9974
  33. package/dist/index.cjs.js.map +4 -4
  34. package/dist/index.d.ts +1 -0
  35. package/dist/index.js +6 -2
  36. package/dist/meta.cjs.json +3871 -3188
  37. package/dist/meta.esbuild.json +4303 -3728
  38. package/dist/utils/animations.d.ts +11 -0
  39. package/package.json +6 -7
  40. package/src/Modal/Dialog.tsx +31 -3
  41. package/src/Prebuilt/App.tsx +46 -99
  42. package/src/Prebuilt/AppContext.tsx +4 -0
  43. package/src/Prebuilt/AppStateContext.tsx +71 -0
  44. package/src/Prebuilt/common/constants.js +35 -0
  45. package/src/Prebuilt/common/utils.js +47 -0
  46. package/src/Prebuilt/components/AppData/AppData.jsx +5 -0
  47. package/src/Prebuilt/components/AppData/useSidepane.js +23 -1
  48. package/src/Prebuilt/components/AppData/useUISettings.js +48 -4
  49. package/src/Prebuilt/components/{conference.jsx → ConferenceScreen.tsx} +30 -43
  50. package/src/Prebuilt/components/Footer/Footer.tsx +5 -0
  51. package/src/Prebuilt/components/Footer/PaginatedParticipants.tsx +63 -32
  52. package/src/Prebuilt/components/Footer/ParticipantList.jsx +2 -1
  53. package/src/Prebuilt/components/Footer/PollsToggle.tsx +22 -0
  54. package/src/Prebuilt/components/Footer/RoleAccordion.tsx +2 -2
  55. package/src/Prebuilt/components/Header/StreamActions.tsx +5 -3
  56. package/src/Prebuilt/components/Leave/DesktopLeaveRoom.tsx +4 -5
  57. package/src/Prebuilt/components/Leave/LeaveRoom.tsx +0 -4
  58. package/src/Prebuilt/components/{PostLeave.jsx → LeaveScreen.tsx} +6 -13
  59. package/src/Prebuilt/components/MoreSettings/ChangeNameModal.jsx +2 -3
  60. package/src/Prebuilt/components/MoreSettings/EmbedUrl.jsx +2 -3
  61. package/src/Prebuilt/components/MoreSettings/SplitComponents/MwebOptions.tsx +18 -1
  62. package/src/Prebuilt/components/{MwebLandscapePrompt.jsx → MwebLandscapePrompt.tsx} +10 -11
  63. package/src/Prebuilt/components/Notifications/{AutoplayBlockedModal.jsx → AutoplayBlockedModal.tsx} +2 -1
  64. package/src/Prebuilt/components/Notifications/{HLSFailureModal.jsx → HLSFailureModal.tsx} +10 -8
  65. package/src/Prebuilt/components/Notifications/{InitErrorModal.jsx → InitErrorModal.tsx} +5 -2
  66. package/src/Prebuilt/components/Notifications/{Notifications.jsx → Notifications.tsx} +41 -27
  67. package/src/Prebuilt/components/Notifications/{PeerNotifications.jsx → PeerNotifications.tsx} +3 -0
  68. package/src/Prebuilt/components/Notifications/{PermissionErrorModal.jsx → PermissionErrorModal.tsx} +6 -4
  69. package/src/Prebuilt/components/Notifications/{ReconnectNotifications.jsx → ReconnectNotifications.tsx} +11 -6
  70. package/src/Prebuilt/components/Notifications/{TrackBulkUnmuteModal.jsx → TrackBulkUnmuteModal.tsx} +9 -3
  71. package/src/Prebuilt/components/Notifications/{TrackUnmuteModal.jsx → TrackUnmuteModal.tsx} +9 -3
  72. package/src/Prebuilt/components/Notifications/index.tsx +1 -0
  73. package/src/Prebuilt/components/Polls/CreatePollQuiz/PollsQuizMenu.jsx +229 -0
  74. package/src/Prebuilt/components/Polls/CreatePollQuiz/Timer.jsx +71 -0
  75. package/src/Prebuilt/components/Polls/CreateQuestions/CreateQuestions.jsx +132 -0
  76. package/src/Prebuilt/components/Polls/CreateQuestions/DeleteQuestionModal.jsx +66 -0
  77. package/src/Prebuilt/components/Polls/CreateQuestions/QuestionForm.jsx +251 -0
  78. package/src/Prebuilt/components/Polls/CreateQuestions/SavedQuestion.jsx +57 -0
  79. package/src/Prebuilt/components/Polls/Polls.tsx +28 -0
  80. package/src/Prebuilt/components/Polls/Voting/PollResultSummary.jsx +125 -0
  81. package/src/Prebuilt/components/Polls/Voting/QuestionCard.jsx +249 -0
  82. package/src/Prebuilt/components/Polls/Voting/StandardVoting.jsx +40 -0
  83. package/src/Prebuilt/components/Polls/Voting/TimedVoting.jsx +36 -0
  84. package/src/Prebuilt/components/Polls/Voting/Voting.jsx +99 -0
  85. package/src/Prebuilt/components/Polls/common/MultipleChoiceOptions.jsx +101 -0
  86. package/src/Prebuilt/components/Polls/common/OptionInputWithDelete.jsx +25 -0
  87. package/src/Prebuilt/components/Polls/common/SingleChoiceOptions.jsx +125 -0
  88. package/src/Prebuilt/components/Polls/common/StatusIndicator.jsx +47 -0
  89. package/src/Prebuilt/components/Polls/common/VoteCount.jsx +28 -0
  90. package/src/Prebuilt/components/Polls/common/VoteProgress.jsx +17 -0
  91. package/src/Prebuilt/components/Polls/common/VoterList.jsx +22 -0
  92. package/src/Prebuilt/components/Polls/common/Votes.jsx +72 -0
  93. package/src/Prebuilt/components/Preview/PreviewForm.tsx +3 -2
  94. package/src/Prebuilt/components/Preview/PreviewJoin.tsx +32 -27
  95. package/src/Prebuilt/components/Preview/{PreviewContainer.tsx → PreviewScreen.tsx} +2 -19
  96. package/src/Prebuilt/components/RaiseHand.jsx +1 -1
  97. package/src/Prebuilt/components/RoleChangeModal.jsx +2 -3
  98. package/src/Prebuilt/components/RoleChangeRequest/RequestPrompt.tsx +2 -3
  99. package/src/Prebuilt/components/Settings/SettingsModal.jsx +2 -3
  100. package/src/Prebuilt/components/Settings/StartRecording.jsx +15 -4
  101. package/src/Prebuilt/components/SidePaneTabs.tsx +1 -1
  102. package/src/Prebuilt/components/StatsForNerds.jsx +2 -3
  103. package/src/Prebuilt/components/Streaming/Common.jsx +31 -21
  104. package/src/Prebuilt/components/VideoLayouts/ScreenshareLayout.tsx +8 -9
  105. package/src/Prebuilt/components/VideoTile.jsx +37 -33
  106. package/src/Prebuilt/components/hooks/useAutoStartStreaming.tsx +3 -3
  107. package/src/Prebuilt/components/hooks/useRedirectToLeave.tsx +9 -17
  108. package/src/Prebuilt/components/pdfAnnotator/pdfFileOptions.jsx +2 -3
  109. package/src/Prebuilt/components/pdfAnnotator/submitPdf.jsx +1 -1
  110. package/src/Prebuilt/components/pdfAnnotator/uploadedFile.jsx +2 -3
  111. package/src/Prebuilt/layouts/EmbedView.jsx +47 -60
  112. package/src/Prebuilt/layouts/PDFView.jsx +49 -99
  113. package/src/Prebuilt/layouts/SidePane.tsx +8 -4
  114. package/src/Prebuilt/layouts/VideoStreamingSection.tsx +2 -2
  115. package/src/Prebuilt/primitives/DialogContent.jsx +4 -5
  116. package/src/context/DialogContext.tsx +13 -0
  117. package/src/hooks/useDialogContainerSelector.tsx +7 -0
  118. package/src/index.ts +1 -0
  119. package/src/utils/animations.ts +6 -0
  120. package/dist/Prebuilt/components/Notifications/HeadlessEndRoomListener.d.ts +0 -2
  121. package/dist/Prebuilt/components/PrebuiltDialogPortal.d.ts +0 -4
  122. package/dist/Prebuilt/components/PrebuiltTileElements.d.ts +0 -2198
  123. package/dist/Prebuilt/components/Preview/PreviewContainer.d.ts +0 -3
  124. package/dist/chunk-HUMNPIYI.js +0 -70
  125. package/dist/chunk-HUMNPIYI.js.map +0 -7
  126. package/dist/chunk-PRM33R4R.js +0 -7160
  127. package/dist/chunk-PRM33R4R.js.map +0 -7
  128. package/dist/conference-N7S47TDK.js +0 -6602
  129. package/dist/conference-N7S47TDK.js.map +0 -7
  130. package/src/Prebuilt/components/GoLiveButton.jsx +0 -42
  131. package/src/Prebuilt/components/Notifications/HeadlessEndRoomListener.tsx +0 -23
  132. package/src/Prebuilt/components/PrebuiltDialogPortal.tsx +0 -6
  133. package/src/Prebuilt/components/PrebuiltTileElements.tsx +0 -5
  134. package/src/Prebuilt/components/Streaming/HLSStreaming.jsx +0 -220
  135. package/src/Prebuilt/components/Streaming/RTMPStreaming.jsx +0 -334
  136. package/src/Prebuilt/components/Streaming/StreamingLanding.jsx +0 -76
  137. /package/dist/{HLSView-DDGPZHA2.js.map → HLSView-U53QN3AC.js.map} +0 -0
  138. /package/{src/Prebuilt/components/Notifications/index.jsx → dist/Prebuilt/components/Notifications/index.d.ts} +0 -0
  139. /package/src/Prebuilt/components/Notifications/{TrackNotifications.jsx → TrackNotifications.tsx} +0 -0
@@ -18,6 +18,7 @@ import {
18
18
  HandIcon,
19
19
  HandRaiseSlashedIcon,
20
20
  PeopleIcon,
21
+ QuizIcon,
21
22
  RecordIcon,
22
23
  SettingsIcon,
23
24
  } from '@100mslive/react-icons';
@@ -40,7 +41,9 @@ import { ChangeNameModal } from '../ChangeNameModal';
40
41
  // @ts-ignore: No implicit any
41
42
  import { MuteAllModal } from '../MuteAllModal';
42
43
  // @ts-ignore: No implicit any
43
- import { useSidepaneToggle } from '../../AppData/useSidepane';
44
+ import { usePollViewToggle, useSidepaneToggle } from '../../AppData/useSidepane';
45
+ // @ts-ignore: No implicit Any
46
+ import { useShowPolls } from '../../AppData/useUISettings';
44
47
  // @ts-ignore: No implicit any
45
48
  import { useDropdownList } from '../../hooks/useDropdownList';
46
49
  // @ts-ignore: No implicit any
@@ -82,6 +85,8 @@ export const MwebOptions = ({
82
85
  const [showRecordingOn, setShowRecordingOn] = useState(false);
83
86
  const [isRecordingLoading, setIsRecordingLoading] = useState(false);
84
87
  const toggleParticipants = useSidepaneToggle(SIDE_PANE_OPTIONS.PARTICIPANTS);
88
+ const { showPolls } = useShowPolls();
89
+ const togglePollView = usePollViewToggle();
85
90
  const peerCount = useHMSStore(selectPeerCount);
86
91
  const emojiCardRef = useRef(null);
87
92
  const { isBRBOn, toggleBRB, isHandRaised, toggleHandRaise } = useMyMetadata();
@@ -192,6 +197,18 @@ export const MwebOptions = ({
192
197
  </ActionTile.Root>
193
198
  )}
194
199
 
200
+ {showPolls && (
201
+ <ActionTile.Root
202
+ onClick={() => {
203
+ togglePollView();
204
+ setOpenOptionsSheet(false);
205
+ }}
206
+ >
207
+ <QuizIcon />
208
+ <ActionTile.Title>Polls and Quizzes</ActionTile.Title>
209
+ </ActionTile.Root>
210
+ )}
211
+
195
212
  {elements?.brb && (
196
213
  <ActionTile.Root
197
214
  active={isBRBOn}
@@ -4,29 +4,28 @@ import { Button } from '../../Button';
4
4
  import { Box, Flex } from '../../Layout';
5
5
  import { Dialog } from '../../Modal';
6
6
  import { Text } from '../../Text';
7
- import { PrebuiltDialogPortal } from './PrebuiltDialogPortal';
8
- import { isAndroid, isIOS } from '../common/constants';
9
7
 
10
8
  export const MwebLandscapePrompt = () => {
11
- const isMobile = isAndroid || isIOS;
12
9
  const [showMwebLandscapePrompt, setShowMwebLandscapePrompt] = useState(false);
13
10
 
14
11
  useEffect(() => {
15
- const handleResize = () => {
16
- setShowMwebLandscapePrompt(isMobile && window.innerHeight < window.innerWidth);
12
+ const handleRotation = () => {
13
+ const angle = window.screen.orientation.angle;
14
+ const type = window.screen.orientation.type;
15
+ // Angle check needed to diff bw mobile and desktop
16
+ setShowMwebLandscapePrompt(angle >= 90 && type.includes('landscape'));
17
17
  };
18
-
19
- handleResize();
20
- window.addEventListener('resize', handleResize);
18
+ handleRotation();
19
+ window.screen.orientation.addEventListener('change', handleRotation);
21
20
 
22
21
  return () => {
23
- window.removeEventListener('resize', handleResize);
22
+ window.screen.orientation.removeEventListener('change', handleRotation);
24
23
  };
25
24
  }, []);
26
25
 
27
26
  return (
28
27
  <Dialog.Root open={showMwebLandscapePrompt} onOpenChange={setShowMwebLandscapePrompt}>
29
- <PrebuiltDialogPortal>
28
+ <Dialog.Portal>
30
29
  <Dialog.Overlay />
31
30
  <Dialog.Content css={{ w: 'min(420px, 90%)', p: '$8', bg: '$surface_dim' }}>
32
31
  <Box>
@@ -52,7 +51,7 @@ export const MwebLandscapePrompt = () => {
52
51
  </Flex>
53
52
  </Box>
54
53
  </Dialog.Content>
55
- </PrebuiltDialogPortal>
54
+ </Dialog.Portal>
56
55
  </Dialog.Root>
57
56
  );
58
57
  };
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { useAutoplayError } from '@100mslive/react-sdk';
3
- import { Button, Dialog, Text } from '../../../';
3
+ import { Button, Dialog, Text } from '../../..';
4
+ // @ts-ignore: No implicit Any
4
5
  import { DialogContent, DialogRow } from '../../primitives/DialogContent';
5
6
 
6
7
  export function AutoplayBlockedModal() {
@@ -1,33 +1,35 @@
1
1
  import React, { useCallback, useState } from 'react';
2
- import { selectHLSState, useHMSActions, useHMSStore } from '@100mslive/react-sdk';
2
+ import { selectHLSState, useHMSActions, useHMSStore, useRecordingStreaming } from '@100mslive/react-sdk';
3
3
  import { Button } from '../../../Button';
4
4
  import { Flex } from '../../../Layout';
5
5
  import { Dialog } from '../../../Modal';
6
6
  import { Text } from '../../../Text';
7
- import { PrebuiltDialogPortal } from '../PrebuiltDialogPortal';
7
+ // @ts-ignore: No implicit Any
8
8
  import { useSetAppDataByKey } from '../AppData/useUISettings';
9
+ // @ts-ignore: No implicit Any
9
10
  import { APP_DATA } from '../../common/constants';
10
11
 
11
12
  export function HLSFailureModal() {
12
- const { hlsError } = useHMSStore(selectHLSState).error || false;
13
+ const hlsError = useHMSStore(selectHLSState).error || false;
13
14
  const [openModal, setOpenModal] = useState(!!hlsError);
14
15
  const hmsActions = useHMSActions();
16
+ const { isRTMPRunning } = useRecordingStreaming();
15
17
  const [isHLSStarted, setHLSStarted] = useSetAppDataByKey(APP_DATA.hlsStarted);
16
18
  const startHLS = useCallback(async () => {
17
19
  try {
18
- if (isHLSStarted) {
20
+ if (isHLSStarted || isRTMPRunning) {
19
21
  return;
20
22
  }
21
23
  setHLSStarted(true);
22
24
  await hmsActions.startHLSStreaming({});
23
25
  } catch (error) {
24
- if (error.message.includes('invalid input')) {
26
+ if ((error as Error).message.includes('invalid input')) {
25
27
  await startHLS();
26
28
  return;
27
29
  }
28
30
  setHLSStarted(false);
29
31
  }
30
- }, [hmsActions, isHLSStarted, setHLSStarted]);
32
+ }, [hmsActions, isHLSStarted, setHLSStarted, isRTMPRunning]);
31
33
 
32
34
  return hlsError ? (
33
35
  <Dialog.Root
@@ -38,7 +40,7 @@ export function HLSFailureModal() {
38
40
  }
39
41
  }}
40
42
  >
41
- <PrebuiltDialogPortal>
43
+ <Dialog.Portal>
42
44
  <Dialog.Overlay />
43
45
  <Dialog.Content css={{ w: 'min(360px, 90%)' }}>
44
46
  <Dialog.Title
@@ -66,7 +68,7 @@ export function HLSFailureModal() {
66
68
  </Button>
67
69
  </Flex>
68
70
  </Dialog.Content>
69
- </PrebuiltDialogPortal>
71
+ </Dialog.Portal>
70
72
  </Dialog.Root>
71
73
  ) : null;
72
74
  }
@@ -1,8 +1,11 @@
1
1
  import React, { useEffect, useState } from 'react';
2
- import { Text } from '../../../';
2
+ import { HMSNotificationTypes, useHMSNotifications } from '@100mslive/react-sdk';
3
+ import { Text } from '../../..';
4
+ // @ts-ignore: No implicit Any
3
5
  import { ErrorDialog } from '../../primitives/DialogContent';
4
6
 
5
- export const InitErrorModal = ({ notification }) => {
7
+ export const InitErrorModal = () => {
8
+ const notification = useHMSNotifications(HMSNotificationTypes.ERROR);
6
9
  const [showModal, setShowModal] = useState(false);
7
10
  const [info, setInfo] = useState({ title: 'Init Error', description: '' });
8
11
 
@@ -1,19 +1,23 @@
1
1
  /* eslint-disable no-case-declarations */
2
2
  import React, { useCallback, useEffect } from 'react';
3
- import { useNavigate, useParams } from 'react-router-dom';
4
3
  import {
5
4
  HMSNotificationTypes,
5
+ HMSRoleChangeRequest,
6
6
  HMSRoomState,
7
7
  selectHasPeerHandRaised,
8
+ selectLocalPeerID,
9
+ selectPeerNameByID,
8
10
  selectRoomState,
9
11
  useCustomEvent,
10
12
  useHMSNotifications,
11
13
  useHMSStore,
12
14
  useHMSVanillaStore,
13
15
  } from '@100mslive/react-sdk';
14
- import { Button } from '../../../';
16
+ import { Button } from '../../..';
15
17
  import { useUpdateRoomLayout } from '../../provider/roomLayoutProvider';
18
+ // @ts-ignore: No implicit Any
16
19
  import { ToastBatcher } from '../Toast/ToastBatcher';
20
+ // @ts-ignore: No implicit Any
17
21
  import { ToastManager } from '../Toast/ToastManager';
18
22
  import { AutoplayBlockedModal } from './AutoplayBlockedModal';
19
23
  import { InitErrorModal } from './InitErrorModal';
@@ -23,22 +27,25 @@ import { ReconnectNotifications } from './ReconnectNotifications';
23
27
  import { TrackBulkUnmuteModal } from './TrackBulkUnmuteModal';
24
28
  import { TrackNotifications } from './TrackNotifications';
25
29
  import { TrackUnmuteModal } from './TrackUnmuteModal';
30
+ // @ts-ignore: No implicit Any
31
+ import { usePollViewToggle } from '../AppData/useSidepane';
32
+ // @ts-ignore: No implicit Any
26
33
  import { useIsNotificationDisabled, useSubscribedNotifications } from '../AppData/useUISettings';
27
- import { useRedirectToLeave } from '../hooks/useRedirectToLeave';
34
+ // @ts-ignore: No implicit Any
28
35
  import { getMetadata } from '../../common/utils';
36
+ // @ts-ignore: No implicit Any
29
37
  import { ROLE_CHANGE_DECLINED } from '../../common/constants';
30
38
  export function Notifications() {
39
+ const localPeerID = useHMSStore(selectLocalPeerID);
31
40
  const notification = useHMSNotifications();
32
- const navigate = useNavigate();
33
- const params = useParams();
34
41
  const subscribedNotifications = useSubscribedNotifications() || {};
35
42
  const roomState = useHMSStore(selectRoomState);
36
43
  const updateRoomLayoutForRole = useUpdateRoomLayout();
37
44
  const isNotificationDisabled = useIsNotificationDisabled();
38
- const { redirectToLeave } = useRedirectToLeave();
39
45
  const vanillaStore = useHMSVanillaStore();
46
+ const togglePollView = usePollViewToggle();
40
47
 
41
- const handleRoleChangeDenied = useCallback(request => {
48
+ const handleRoleChangeDenied = useCallback((request: HMSRoleChangeRequest & { peerName: string }) => {
42
49
  ToastManager.addToast({
43
50
  title: `${request.peerName} denied your request to join the ${request.role.name} role`,
44
51
  variant: 'error',
@@ -85,28 +92,13 @@ export function Notifications() {
85
92
  title: `Error: ${notification.data?.message}`,
86
93
  });
87
94
  } else {
88
- // show button action when the error is terminal
89
- const toastId = ToastManager.addToast({
95
+ ToastManager.addToast({
90
96
  title:
91
97
  notification.data?.message ||
92
98
  'We couldn’t reconnect you. When you’re back online, try joining the room.',
93
- inlineAction: true,
94
- action: (
95
- <Button
96
- onClick={() => {
97
- ToastManager.removeToast(toastId);
98
- navigate(`/${params.roomId}${params.role ? `/${params.role}` : ''}`);
99
- }}
100
- >
101
- Rejoin
102
- </Button>
103
- ),
104
99
  close: false,
105
100
  });
106
101
  }
107
- // goto leave for terminal if any action is not performed within 1s
108
- // if network is still unavailable going to preview will throw an error
109
- redirectToLeave(1000);
110
102
  return;
111
103
  }
112
104
  // Autoplay error or user denied screen share (cancelled browser pop-up)
@@ -122,11 +114,11 @@ export function Notifications() {
122
114
  });
123
115
  break;
124
116
  case HMSNotificationTypes.ROLE_UPDATED: {
125
- if (notification.data?.isLocal) {
117
+ if (notification.data?.isLocal && notification.data?.roleName) {
126
118
  ToastManager.addToast({
127
119
  title: `You are now a ${notification.data.roleName}`,
128
120
  });
129
- updateRoomLayoutForRole(notification.data.roleName);
121
+ updateRoomLayoutForRole?.(notification.data.roleName);
130
122
  }
131
123
  break;
132
124
  }
@@ -145,13 +137,35 @@ export function Notifications() {
145
137
  title: `${notification.message}.
146
138
  ${notification.data.reason && `Reason: ${notification.data.reason}`}`,
147
139
  });
148
- redirectToLeave(1000);
149
140
  break;
150
141
  case HMSNotificationTypes.DEVICE_CHANGE_UPDATE:
151
142
  ToastManager.addToast({
152
143
  title: notification.message,
153
144
  });
154
145
  break;
146
+
147
+ case HMSNotificationTypes.POLL_STARTED:
148
+ if (notification.data.startedBy !== localPeerID) {
149
+ const pollStartedBy = vanillaStore.getState(selectPeerNameByID(notification.data.startedBy));
150
+ ToastManager.addToast({
151
+ title: `${pollStartedBy} started a ${notification.data.type}: ${notification.data.title}`,
152
+ action: (
153
+ <Button
154
+ onClick={() => togglePollView(notification.data.id)}
155
+ variant="standard"
156
+ css={{
157
+ backgroundColor: '$surface_bright',
158
+ fontWeight: '$semiBold',
159
+ color: '$on_surface_high',
160
+ p: '$xs $md',
161
+ }}
162
+ >
163
+ Vote
164
+ </Button>
165
+ ),
166
+ });
167
+ }
168
+ break;
155
169
  default:
156
170
  break;
157
171
  }
@@ -171,7 +185,7 @@ export function Notifications() {
171
185
  <ReconnectNotifications />
172
186
  <AutoplayBlockedModal />
173
187
  <PermissionErrorModal />
174
- <InitErrorModal notification={notification} />
188
+ <InitErrorModal />
175
189
  </>
176
190
  );
177
191
  }
@@ -1,7 +1,10 @@
1
1
  import { useEffect } from 'react';
2
2
  import { HMSNotificationTypes, useHMSNotifications } from '@100mslive/react-sdk';
3
+ // @ts-ignore: No implicit Any
3
4
  import { ToastBatcher } from '../Toast/ToastBatcher';
5
+ // @ts-ignore: No implicit Any
4
6
  import { useSubscribedNotifications } from '../AppData/useUISettings';
7
+ // @ts-ignore: No implicit Any
5
8
  import { SUBSCRIBED_NOTIFICATIONS } from '../../common/constants';
6
9
 
7
10
  const notificationTypes = [
@@ -1,10 +1,12 @@
1
1
  import React, { useEffect, useState } from 'react';
2
2
  import { useMedia } from 'react-use';
3
3
  import { HMSNotificationTypes, useHMSNotifications } from '@100mslive/react-sdk';
4
- import { Button, config as cssConfig, Dialog, Flex, Text } from '../../../';
4
+ import { Button, config as cssConfig, Dialog, Flex, Text } from '../../..';
5
+ // @ts-ignore: No implicit Any
5
6
  import androidPermissionAlert from '../../images/android-perm-1.png';
7
+ // @ts-ignore: No implicit Any
6
8
  import iosPermissions from '../../images/ios-perm-0.png';
7
- import { PrebuiltDialogPortal } from '../PrebuiltDialogPortal';
9
+ // @ts-ignore: No implicit Any
8
10
  import { isAndroid, isIOS } from '../../common/constants';
9
11
 
10
12
  export function PermissionErrorModal() {
@@ -40,7 +42,7 @@ export function PermissionErrorModal() {
40
42
 
41
43
  return deviceType ? (
42
44
  <Dialog.Root open={!!deviceType}>
43
- <PrebuiltDialogPortal>
45
+ <Dialog.Portal>
44
46
  <Dialog.Overlay />
45
47
  <Dialog.Content css={{ w: 'min(380px, 90%)', p: '$8' }}>
46
48
  <Dialog.Title
@@ -119,7 +121,7 @@ export function PermissionErrorModal() {
119
121
  </Flex>
120
122
  ) : null}
121
123
  </Dialog.Content>
122
- </PrebuiltDialogPortal>
124
+ </Dialog.Portal>
123
125
  </Dialog.Root>
124
126
  ) : null;
125
127
  }
@@ -1,7 +1,9 @@
1
1
  import React, { useEffect, useState } from 'react';
2
2
  import { HMSNotificationTypes, useHMSNotifications } from '@100mslive/react-sdk';
3
- import { Dialog, Flex, Loading, Text } from '../../../';
3
+ import { Dialog, Flex, Loading, Text } from '../../..';
4
+ // @ts-ignore: No implicit Any
4
5
  import { ToastConfig } from '../Toast/ToastConfig';
6
+ // @ts-ignore: No implicit Any
5
7
  import { ToastManager } from '../Toast/ToastManager';
6
8
 
7
9
  const notificationTypes = [
@@ -9,21 +11,24 @@ const notificationTypes = [
9
11
  HMSNotificationTypes.RECONNECTING,
10
12
  HMSNotificationTypes.ERROR,
11
13
  ];
12
- let notificationId = null;
14
+ let notificationId: string | null = null;
13
15
 
14
16
  export const ReconnectNotifications = () => {
15
17
  const notification = useHMSNotifications(notificationTypes);
16
18
  const [open, setOpen] = useState(false);
17
19
  useEffect(() => {
18
- if (notification?.type === HMSNotificationTypes.ERROR && notification?.data?.isTerminal) {
20
+ if (!notification) {
21
+ return;
22
+ }
23
+ if (notification.type === HMSNotificationTypes.ERROR && notification.data?.isTerminal) {
19
24
  setOpen(false);
20
- } else if (notification?.type === HMSNotificationTypes.RECONNECTED) {
25
+ } else if (notification.type === HMSNotificationTypes.RECONNECTED) {
21
26
  notificationId = ToastManager.replaceToast(notificationId, ToastConfig.RECONNECTED.single());
22
27
  setOpen(false);
23
- } else if (notification?.type === HMSNotificationTypes.RECONNECTING) {
28
+ } else if (notification.type === HMSNotificationTypes.RECONNECTING) {
24
29
  notificationId = ToastManager.replaceToast(
25
30
  notificationId,
26
- ToastConfig.RECONNECTING.single(notification.data.message),
31
+ ToastConfig.RECONNECTING.single(notification.data?.message),
27
32
  );
28
33
  }
29
34
  }, [notification]);
@@ -1,11 +1,17 @@
1
1
  import React, { useEffect, useState } from 'react';
2
- import { HMSNotificationTypes, useHMSActions, useHMSNotifications } from '@100mslive/react-sdk';
2
+ import {
3
+ HMSChangeMultiTrackStateRequest,
4
+ HMSNotificationTypes,
5
+ useHMSActions,
6
+ useHMSNotifications,
7
+ } from '@100mslive/react-sdk';
3
8
  import { MicOnIcon } from '@100mslive/react-icons';
9
+ // @ts-ignore: No implicit Any
4
10
  import { RequestDialog } from '../../primitives/DialogContent';
5
11
 
6
12
  export const TrackBulkUnmuteModal = () => {
7
13
  const hmsActions = useHMSActions();
8
- const [muteNotification, setMuteNotification] = useState(null);
14
+ const [muteNotification, setMuteNotification] = useState<HMSChangeMultiTrackStateRequest | null>(null);
9
15
  const notification = useHMSNotifications([
10
16
  HMSNotificationTypes.CHANGE_MULTI_TRACK_STATE_REQUEST,
11
17
  HMSNotificationTypes.ROOM_ENDED,
@@ -38,7 +44,7 @@ export const TrackBulkUnmuteModal = () => {
38
44
  <RequestDialog
39
45
  title="Track Unmute Request"
40
46
  body={`${peer?.name} has requested you to unmute your tracks.`}
41
- onOpenChange={value => !value && setMuteNotification(null)}
47
+ onOpenChange={(value: boolean) => !value && setMuteNotification(null)}
42
48
  onAction={() => {
43
49
  tracks.forEach(track => {
44
50
  hmsActions.setEnabledTrack(track.id, enabled);
@@ -1,6 +1,12 @@
1
1
  import React, { useEffect, useState } from 'react';
2
- import { HMSNotificationTypes, useHMSActions, useHMSNotifications } from '@100mslive/react-sdk';
2
+ import {
3
+ HMSChangeTrackStateRequest,
4
+ HMSNotificationTypes,
5
+ useHMSActions,
6
+ useHMSNotifications,
7
+ } from '@100mslive/react-sdk';
3
8
  import { MicOnIcon } from '@100mslive/react-icons';
9
+ // @ts-ignore: No implicit Any
4
10
  import { RequestDialog } from '../../primitives/DialogContent';
5
11
 
6
12
  export const TrackUnmuteModal = () => {
@@ -10,7 +16,7 @@ export const TrackUnmuteModal = () => {
10
16
  HMSNotificationTypes.ROOM_ENDED,
11
17
  HMSNotificationTypes.REMOVED_FROM_ROOM,
12
18
  ]);
13
- const [muteNotification, setMuteNotification] = useState(null);
19
+ const [muteNotification, setMuteNotification] = useState<HMSChangeTrackStateRequest | null>(null);
14
20
 
15
21
  useEffect(() => {
16
22
  switch (notification?.type) {
@@ -37,7 +43,7 @@ export const TrackUnmuteModal = () => {
37
43
  return (
38
44
  <RequestDialog
39
45
  title="Track Unmute Request"
40
- onOpenChange={value => !value && setMuteNotification(null)}
46
+ onOpenChange={(value: boolean) => !value && setMuteNotification(null)}
41
47
  body={`${peer?.name} has requested you to unmute your ${track?.source} ${track?.type}.`}
42
48
  onAction={() => {
43
49
  hmsActions.setEnabledTrack(track.id, enabled);
@@ -0,0 +1 @@
1
+ export { Notifications } from './Notifications';