agora-appbuilder-core 3.0.10 → 3.0.11

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 (248) hide show
  1. package/Readme.md +0 -6
  2. package/package.json +2 -2
  3. package/template/_package-lock.json +4719 -5862
  4. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +0 -4
  5. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +0 -18
  6. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +0 -2
  7. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +26 -30
  8. package/template/agora-rn-uikit/src/Controls/Icons.ts +83 -30
  9. package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +6 -6
  10. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +0 -1
  11. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +0 -1
  12. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +0 -1
  13. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +0 -1
  14. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +0 -1
  15. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +0 -2
  16. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +0 -1
  17. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +0 -1
  18. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +0 -1
  19. package/template/agora-rn-uikit/src/Reducer/index.ts +0 -3
  20. package/template/agora-rn-uikit/src/Rtc/Create.tsx +1 -89
  21. package/template/agora-rn-uikit/src/RtcConfigure.tsx +2 -39
  22. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +5 -15
  23. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +9 -15
  24. package/template/agora-rn-uikit/src/index.ts +1 -3
  25. package/template/android/app/build.gradle +0 -1
  26. package/template/android/app/src/main/AndroidManifest.xml +15 -22
  27. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +0 -50
  28. package/template/android/build.gradle +3 -3
  29. package/template/babel.config.js +0 -1
  30. package/template/bridge/rtc/webNg/RtcEngine.ts +17 -110
  31. package/template/customization-api/sub-components.ts +1 -1
  32. package/template/customization-api/typeDefinition.ts +1 -2
  33. package/template/electron/index.html +27 -27
  34. package/template/electron/renderer/index.js +0 -1
  35. package/template/global.d.ts +4 -25
  36. package/template/index.rsdk.tsx +0 -1
  37. package/template/index.web.js +1 -2
  38. package/template/index.wsdk.tsx +1 -1
  39. package/template/ios/HelloWorld/Info.plist +1 -14
  40. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +0 -17
  41. package/template/metro.config.js +1 -1
  42. package/template/package.json +7 -18
  43. package/template/react-native-toast-message/index.d.ts +43 -43
  44. package/template/react-native-toast-message/src/colors/index.js +2 -3
  45. package/template/react-native-toast-message/src/components/base/index.js +59 -46
  46. package/template/react-native-toast-message/src/components/base/styles.js +32 -16
  47. package/template/react-native-toast-message/src/components/error.js +2 -3
  48. package/template/react-native-toast-message/src/components/info.js +2 -3
  49. package/template/react-native-toast-message/src/components/success.js +2 -3
  50. package/template/react-native-toast-message/src/index.js +31 -122
  51. package/template/react-native-toast-message/src/index.sdk.tsx +35 -125
  52. package/template/react-native-toast-message/src/styles.js +4 -3
  53. package/template/react-native-toast-message/src/styles.sdk.ts +4 -3
  54. package/template/src/App.tsx +0 -6
  55. package/template/src/AppWrapper.tsx +28 -63
  56. package/template/src/assets/icons.ts +102 -0
  57. package/template/src/atoms/HorizontalRule.tsx +1 -3
  58. package/template/src/atoms/PrimaryButton.tsx +26 -51
  59. package/template/src/atoms/SecondaryButton.tsx +5 -8
  60. package/template/src/atoms/TextInput.tsx +14 -12
  61. package/template/src/components/Chat.tsx +214 -86
  62. package/template/src/components/ChatContext.ts +1 -8
  63. package/template/src/components/ColorConfigure.tsx +1 -1
  64. package/template/src/components/ColorContext.ts +1 -1
  65. package/template/src/components/{Controls1.native.tsx → Controls.native.tsx} +4 -6
  66. package/template/src/components/Controls.tsx +42 -342
  67. package/template/src/components/DeviceConfigure.tsx +101 -461
  68. package/template/src/components/DeviceContext.tsx +4 -8
  69. package/template/src/components/EventsConfigure.tsx +7 -144
  70. package/template/src/components/GraphQLProvider.tsx +1 -1
  71. package/template/src/components/GridVideo.tsx +44 -59
  72. package/template/src/components/HostControlView.tsx +35 -114
  73. package/template/src/components/Navbar.tsx +398 -216
  74. package/template/src/components/NetworkQualityContext.tsx +20 -20
  75. package/template/src/components/ParticipantsView.tsx +154 -177
  76. package/template/src/components/PinnedVideo.tsx +120 -207
  77. package/template/src/components/Precall.native.tsx +119 -358
  78. package/template/src/components/Precall.tsx +135 -269
  79. package/template/src/components/RTMConfigure.tsx +4 -27
  80. package/template/src/components/Router.electron.ts +0 -1
  81. package/template/src/components/Router.native.ts +0 -1
  82. package/template/src/components/Router.sdk.ts +0 -1
  83. package/template/src/components/Router.ts +0 -1
  84. package/template/src/components/Settings.tsx +95 -26
  85. package/template/src/components/SettingsView.tsx +56 -251
  86. package/template/src/components/Share.tsx +273 -302
  87. package/template/src/components/StorageContext.tsx +3 -30
  88. package/template/src/components/chat-messages/useChatMessages.tsx +23 -69
  89. package/template/src/components/chat-ui/useChatUIControl.tsx +0 -7
  90. package/template/src/components/common/Error.tsx +6 -20
  91. package/template/src/components/common/Logo.tsx +15 -16
  92. package/template/src/components/contexts/LiveStreamDataContext.tsx +5 -10
  93. package/template/src/components/contexts/VideoMeetingDataContext.tsx +7 -37
  94. package/template/src/components/livestream/LiveStreamContext.tsx +36 -270
  95. package/template/src/components/livestream/Types.ts +14 -39
  96. package/template/src/components/livestream/index.ts +0 -1
  97. package/template/src/components/livestream/views/LiveStreamControls.tsx +4 -12
  98. package/template/src/components/participants/AllAudienceParticipants.tsx +30 -101
  99. package/template/src/components/participants/AllHostParticipants.tsx +34 -103
  100. package/template/src/components/participants/MeParticipant.tsx +38 -0
  101. package/template/src/components/participants/ParticipantName.tsx +7 -13
  102. package/template/src/components/participants/ParticipantSectionTitle.tsx +10 -35
  103. package/template/src/components/participants/RemoteParticipants.tsx +71 -0
  104. package/template/src/components/participants/ScreenshareParticipants.tsx +12 -144
  105. package/template/src/components/precall/{LocalMute1.native.tsx → LocalMute.native.tsx} +5 -21
  106. package/template/src/components/precall/LocalMute.tsx +14 -84
  107. package/template/src/components/precall/VideoPreview.native.tsx +3 -48
  108. package/template/src/components/precall/VideoPreview.tsx +7 -163
  109. package/template/src/components/precall/joinCallBtn.tsx +2 -15
  110. package/template/src/components/precall/meetingTitle.tsx +12 -15
  111. package/template/src/components/precall/selectDevice.tsx +21 -1
  112. package/template/src/components/precall/textInput.tsx +4 -32
  113. package/template/src/components/precall/usePreCall.tsx +0 -16
  114. package/template/src/components/styles.ts +21 -42
  115. package/template/src/components/useShareLink.tsx +14 -12
  116. package/template/src/language/default-labels/precallScreenLabels.ts +3 -3
  117. package/template/src/pages/Authenticate.tsx +15 -5
  118. package/template/src/pages/Create.tsx +165 -293
  119. package/template/src/pages/Join.tsx +67 -93
  120. package/template/src/pages/VideoCall.tsx +64 -89
  121. package/template/src/pages/video-call/DefaultLayouts.ts +4 -4
  122. package/template/src/pages/video-call/NameWithMicIcon.tsx +44 -120
  123. package/template/src/pages/video-call/RenderComponent.tsx +2 -3
  124. package/template/src/pages/video-call/VideoCallScreen.tsx +9 -45
  125. package/template/src/pages/video-call/VideoComponent.tsx +3 -18
  126. package/template/src/pages/video-call/VideoRenderer.tsx +60 -218
  127. package/template/src/rtm-events/constants.ts +0 -2
  128. package/template/src/subComponents/ChatBubble.tsx +83 -123
  129. package/template/src/subComponents/ChatContainer.tsx +84 -257
  130. package/template/src/subComponents/ChatInput.tsx +46 -61
  131. package/template/src/subComponents/Checkbox.native.tsx +5 -16
  132. package/template/src/subComponents/Checkbox.tsx +2 -2
  133. package/template/src/subComponents/CopyJoinInfo.tsx +58 -36
  134. package/template/src/subComponents/FallbackLogo.tsx +40 -122
  135. package/template/src/subComponents/LanguageSelector.tsx +1 -1
  136. package/template/src/subComponents/{LayoutIconDropdown1.native.tsx → LayoutIconDropdown.native.tsx} +18 -4
  137. package/template/src/subComponents/LayoutIconDropdown.tsx +134 -131
  138. package/template/src/subComponents/LocalAudioMute.tsx +27 -119
  139. package/template/src/subComponents/LocalEndCall.tsx +33 -71
  140. package/template/src/subComponents/LocalSwitchCamera.tsx +30 -17
  141. package/template/src/subComponents/LocalVideoMute.tsx +27 -117
  142. package/template/src/subComponents/Logo.tsx +4 -3
  143. package/template/src/subComponents/LogoutButton.tsx +1 -1
  144. package/template/src/subComponents/NetworkQualityPill.tsx +63 -60
  145. package/template/src/subComponents/OpenInNativeButton.tsx +3 -3
  146. package/template/src/subComponents/Recording.tsx +29 -28
  147. package/template/src/subComponents/RemoteAudioMute.tsx +29 -83
  148. package/template/src/subComponents/RemoteEndCall.tsx +5 -8
  149. package/template/src/subComponents/RemoteVideoMute.tsx +21 -74
  150. package/template/src/subComponents/ScreenShareNotice.tsx +8 -83
  151. package/template/src/subComponents/SelectDevice.tsx +61 -404
  152. package/template/src/subComponents/SelectOAuth.tsx +8 -9
  153. package/template/src/subComponents/ToastConfig.tsx +10 -150
  154. package/template/src/subComponents/chat/ChatParticipants.tsx +78 -187
  155. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +32 -95
  156. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +33 -29
  157. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +6 -6
  158. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +11 -24
  159. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +10 -17
  160. package/template/src/subComponents/recording/useRecording.tsx +27 -79
  161. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +70 -52
  162. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +2 -11
  163. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +4 -26
  164. package/template/src/utils/common.tsx +1 -155
  165. package/template/src/utils/index.tsx +0 -19
  166. package/template/src/utils/isMobileOrTablet.ts +2 -7
  167. package/template/src/utils/useButtonTemplate.tsx +0 -1
  168. package/template/src/utils/useMuteToggleLocal.ts +3 -54
  169. package/template/web/index.html +0 -5
  170. package/template/webpack.commons.js +8 -13
  171. package/template/webpack.web.config.js +0 -1
  172. package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +0 -11
  173. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +0 -24
  174. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +0 -11
  175. package/template/android/app/src/main/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  176. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  177. package/template/android/app/src/main/res/values/colors.xml +0 -7
  178. package/template/react-native-toast-message/src/components/checkbox.js +0 -178
  179. package/template/react-native.config.js +0 -7
  180. package/template/src/assets/font-styles.css +0 -329
  181. package/template/src/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  182. package/template/src/assets/fonts/icomoon.ttf +0 -0
  183. package/template/src/assets/permission.png +0 -0
  184. package/template/src/assets/selection.json +0 -1
  185. package/template/src/atoms/ActionMenu.tsx +0 -236
  186. package/template/src/atoms/AnimatedActiveSpeaker.native.tsx +0 -71
  187. package/template/src/atoms/AnimatedActiveSpeaker.tsx +0 -84
  188. package/template/src/atoms/AnimatedRings.native.tsx +0 -68
  189. package/template/src/atoms/AnimatedRings.tsx +0 -70
  190. package/template/src/atoms/Card.tsx +0 -61
  191. package/template/src/atoms/CircularProgress.native.tsx +0 -121
  192. package/template/src/atoms/CircularProgress.tsx +0 -102
  193. package/template/src/atoms/CustomIcon.tsx +0 -88
  194. package/template/src/atoms/CustomSwitch.tsx +0 -287
  195. package/template/src/atoms/Dropdown.tsx +0 -306
  196. package/template/src/atoms/IconButton.tsx +0 -162
  197. package/template/src/atoms/ImageIcon.tsx +0 -98
  198. package/template/src/atoms/InfoBubble.tsx +0 -291
  199. package/template/src/atoms/Input.tsx +0 -87
  200. package/template/src/atoms/InviteInfo.tsx +0 -166
  201. package/template/src/atoms/LinkButton.tsx +0 -28
  202. package/template/src/atoms/OutlineButton.tsx +0 -61
  203. package/template/src/atoms/ParticipantsCount.tsx +0 -73
  204. package/template/src/atoms/Popup.tsx +0 -147
  205. package/template/src/atoms/RecordingInfo.tsx +0 -49
  206. package/template/src/atoms/Spacer.tsx +0 -22
  207. package/template/src/atoms/TertiaryButton.tsx +0 -78
  208. package/template/src/atoms/Toggle.tsx +0 -47
  209. package/template/src/atoms/Tooltip.native.tsx +0 -65
  210. package/template/src/atoms/Tooltip.tsx +0 -94
  211. package/template/src/atoms/UserAvatar.tsx +0 -60
  212. package/template/src/components/CommonStyles.ts +0 -44
  213. package/template/src/components/ToastComponent.tsx +0 -8
  214. package/template/src/components/participants/Participant.tsx +0 -302
  215. package/template/src/components/participants/UserActionMenuOptions.tsx +0 -398
  216. package/template/src/components/popups/InvitePopup.tsx +0 -115
  217. package/template/src/components/popups/StopRecordingPopup.tsx +0 -114
  218. package/template/src/components/precall/PermissionHelper.native.tsx +0 -5
  219. package/template/src/components/precall/PermissionHelper.tsx +0 -126
  220. package/template/src/components/precall/PreCallSettings.tsx +0 -52
  221. package/template/src/components/useToast.tsx +0 -41
  222. package/template/src/components/useVideoCall.tsx +0 -65
  223. package/template/src/pages/Endcall.tsx +0 -148
  224. package/template/src/pages/video-call/ActionSheet.native.tsx +0 -215
  225. package/template/src/pages/video-call/ActionSheet.tsx +0 -226
  226. package/template/src/pages/video-call/ActionSheetContent.tsx +0 -479
  227. package/template/src/pages/video-call/ActionSheetHandle.tsx +0 -38
  228. package/template/src/pages/video-call/ActionSheetStyles.css +0 -138
  229. package/template/src/pages/video-call/SidePanelHeader.tsx +0 -190
  230. package/template/src/pages/video-call/VideoCallMobileView.tsx +0 -139
  231. package/template/src/pages/video-call/VideoCallScreen.native.tsx +0 -37
  232. package/template/src/subComponents/ChatInput.ios.tsx +0 -237
  233. package/template/src/subComponents/EndcallPopup.tsx +0 -107
  234. package/template/src/subComponents/LayoutIconButton.tsx +0 -201
  235. package/template/src/subComponents/RemoteMutePopup.tsx +0 -193
  236. package/template/src/subComponents/RemoveMeetingPopup.tsx +0 -109
  237. package/template/src/subComponents/RemoveScreensharePopup.tsx +0 -109
  238. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +0 -207
  239. package/template/src/subComponents/SidePanelHeader.tsx +0 -112
  240. package/template/src/theme/index.ts +0 -46
  241. package/template/src/utils/PlatformWrapper.tsx +0 -21
  242. package/template/src/utils/hexadecimalTransparency.ts +0 -108
  243. package/template/src/utils/pendingStateUpdateHelper.ts +0 -19
  244. package/template/src/utils/useFocus.tsx +0 -46
  245. package/template/src/utils/useIsActiveSpeaker.ts +0 -27
  246. package/template/src/utils/useIsHandRaised.ts +0 -13
  247. package/template/src/utils/useRemoteEndScreenshare.ts +0 -26
  248. package/template/src/utils/useRemoteRequest.ts +0 -84
@@ -9,76 +9,26 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import React, {useContext, useEffect, useRef} from 'react';
13
- import {StyleSheet} from 'react-native';
14
- import PrimaryButton from '../atoms/PrimaryButton';
12
+ import React, {useContext, useEffect} from 'react';
15
13
  import {RtcContext} from '../../agora-rn-uikit';
16
14
  import events from '../rtm-events-api';
17
15
  import {controlMessageEnum} from '../components/ChatContext';
18
- import Toast from '../../react-native-toast-message';
19
- import TertiaryButton from '../atoms/TertiaryButton';
20
- import {useRender} from 'customization-api';
21
- import {useParams} from '../components/Router';
22
- import StorageContext from './StorageContext';
23
- import {isWebInternal, trimText} from '../utils/common';
24
16
 
25
17
  interface Props {
26
18
  children: React.ReactNode;
27
19
  }
28
20
 
29
21
  const EventsConfigure: React.FC<Props> = (props) => {
30
- const {setStore} = useContext(StorageContext);
31
22
  const {RtcEngine, dispatch} = useContext(RtcContext);
32
- const {renderList} = useRender();
33
- const renderListRef = useRef({renderList});
34
- const {phrase} = useParams<{phrase: string}>();
35
23
  useEffect(() => {
36
- renderListRef.current.renderList = renderList;
37
- }, [renderList]);
38
- useEffect(() => {
39
- //user joined event listener
40
- // events.on(controlMessageEnum.newUserJoined, ({payload}) => {
41
- // const data = JSON.parse(payload);
42
- // if (data?.name) {
43
- // Toast.show({
44
- // text1: `${trimText(data.name)} has joined the call`,
45
- // visibilityTime: 3000,
46
- // type: 'info',
47
- // primaryBtn: null,
48
- // secondaryBtn: null,
49
- // });
50
- // }
51
- // });
52
- events.on(controlMessageEnum.muteVideo, async ({payload, sender}) => {
53
- Toast.show({
54
- type: 'info',
55
- // text1: `${
56
- // renderListRef.current.renderList[sender].name || 'The host'
57
- // } muted you.`,
58
- text1: 'The host has muted your video.',
59
- visibilityTime: 3000,
60
- primaryBtn: null,
61
- secondaryBtn: null,
62
- });
63
- isWebInternal()
64
- ? await RtcEngine.muteLocalVideoStream(true)
65
- : await RtcEngine.enableLocalVideo(false);
24
+ events.on(controlMessageEnum.muteVideo, () => {
25
+ RtcEngine.muteLocalVideoStream(true);
66
26
  dispatch({
67
27
  type: 'LocalMuteVideo',
68
28
  value: [0],
69
29
  });
70
30
  });
71
- events.on(controlMessageEnum.muteAudio, ({sender}) => {
72
- Toast.show({
73
- type: 'info',
74
- // text1: `${
75
- // renderListRef.current.renderList[sender].name || 'The host'
76
- // } muted you.`,
77
- text1: 'The host has muted your audio.',
78
- visibilityTime: 3000,
79
- primaryBtn: null,
80
- secondaryBtn: null,
81
- });
31
+ events.on(controlMessageEnum.muteAudio, () => {
82
32
  RtcEngine.muteLocalAudioStream(true);
83
33
  dispatch({
84
34
  type: 'LocalMuteAudio',
@@ -86,73 +36,12 @@ const EventsConfigure: React.FC<Props> = (props) => {
86
36
  });
87
37
  });
88
38
  events.on(controlMessageEnum.kickUser, () => {
89
- Toast.show({
90
- type: 'info',
91
- text1: 'The host has removed you from the meeting.',
92
- visibilityTime: 5000,
93
- primaryBtn: null,
94
- secondaryBtn: null,
95
- });
96
- setTimeout(() => {
97
- dispatch({
98
- type: 'EndCall',
99
- value: [],
100
- });
101
- }, 5000);
102
- });
103
- events.on(controlMessageEnum.requestAudio, () => {
104
- Toast.show({
105
- type: 'info',
106
- text1: 'The host has requested you to speak',
107
- visibilityTime: 3000,
108
- primaryBtn: (
109
- <PrimaryButton
110
- containerStyle={style.primaryBtn}
111
- textStyle={{fontWeight: '600', fontSize: 16, paddingLeft: 0}}
112
- text="UNMUTE"
113
- onPress={() => {
114
- RtcEngine.muteLocalAudioStream(false);
115
- dispatch({
116
- type: 'LocalMuteAudio',
117
- value: [1],
118
- });
119
- Toast.hide();
120
- }}
121
- />
122
- ),
123
- secondaryBtn: SecondaryBtn,
124
- });
125
- });
126
- events.on(controlMessageEnum.requestVideo, () => {
127
- Toast.show({
128
- type: 'info',
129
- text1: 'The host has asked you to start your video.',
130
- visibilityTime: 3000,
131
- primaryBtn: (
132
- <PrimaryButton
133
- containerStyle={style.primaryBtn}
134
- textStyle={style.primaryBtnText}
135
- text="UNMUTE"
136
- onPress={async () => {
137
- isWebInternal()
138
- ? await RtcEngine.muteLocalVideoStream(false)
139
- : await RtcEngine.enableLocalVideo(true);
140
- dispatch({
141
- type: 'LocalMuteVideo',
142
- value: [1],
143
- });
144
- Toast.hide();
145
- }}
146
- />
147
- ),
148
- secondaryBtn: SecondaryBtn,
39
+ dispatch({
40
+ type: 'EndCall',
41
+ value: [],
149
42
  });
150
43
  });
151
-
152
44
  return () => {
153
- //events.off(controlMessageEnum.newUserJoined);
154
- events.off(controlMessageEnum.requestAudio);
155
- events.off(controlMessageEnum.requestVideo);
156
45
  events.off(controlMessageEnum.muteVideo);
157
46
  events.off(controlMessageEnum.muteAudio);
158
47
  events.off(controlMessageEnum.kickUser);
@@ -163,29 +52,3 @@ const EventsConfigure: React.FC<Props> = (props) => {
163
52
  };
164
53
 
165
54
  export default EventsConfigure;
166
-
167
- const style = StyleSheet.create({
168
- secondaryBtn: {marginLeft: 16, height: 40, paddingVertical: 5},
169
- primaryBtn: {
170
- maxWidth: 109,
171
- minWidth: 109,
172
- height: 40,
173
- borderRadius: 4,
174
- paddingVertical: 5,
175
- paddingHorizontal: 12,
176
- },
177
- primaryBtnText: {
178
- fontWeight: '600',
179
- fontSize: 16,
180
- paddingLeft: 0,
181
- },
182
- });
183
- const SecondaryBtn = (
184
- <TertiaryButton
185
- containerStyle={style.secondaryBtn}
186
- text="LATER"
187
- onPress={() => {
188
- Toast.hide();
189
- }}
190
- />
191
- );
@@ -20,7 +20,7 @@ import {setContext} from '@apollo/client/link/context';
20
20
  // import useMount from './useMount';
21
21
  import React, {createContext, useContext, useRef} from 'react';
22
22
  import StorageContext from './StorageContext';
23
- import AsyncStorage from '@react-native-async-storage/async-storage'; //'@react-native-community/async-storage';
23
+ import AsyncStorage from '@react-native-community/async-storage';
24
24
 
25
25
  export const GraphQLContext = createContext<{
26
26
  client: ApolloClient<NormalizedCacheObject>;
@@ -9,13 +9,12 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import {layoutComponent, useRender, useRtc} from 'customization-api';
13
- import React, {useContext, useMemo, useState} from 'react';
14
- import {View, StyleSheet, Pressable, Text} from 'react-native';
15
- import {isWebInternal, useIsDesktop} from '../utils/common';
12
+ import {layoutComponent, useRtc} from 'customization-api';
13
+ import React, {useMemo, useState} from 'react';
14
+ import {View, StyleSheet, Dimensions, Pressable} from 'react-native';
15
+ import {isWebInternal} from '../utils/common';
16
16
  import {useSetPinnedLayout} from '../pages/video-call/DefaultLayouts';
17
17
  import RenderComponent from '../pages/video-call/RenderComponent';
18
- import {ClientRole, PropsContext} from '../../agora-rn-uikit';
19
18
  const layout = (len: number, isDesktop: boolean = true) => {
20
19
  const rows = Math.round(Math.sqrt(len));
21
20
  const cols = Math.ceil(len / rows);
@@ -36,37 +35,34 @@ const layout = (len: number, isDesktop: boolean = true) => {
36
35
 
37
36
  const GridVideo: layoutComponent = ({renderData}) => {
38
37
  const {dispatch} = useRtc();
39
- const {rtcProps} = useContext(PropsContext);
40
- const {activeUids} = useRender();
41
- const isDesktop = useIsDesktop();
38
+ let onLayout = (e: any) => {
39
+ setDim([
40
+ e.nativeEvent.layout.width,
41
+ e.nativeEvent.layout.height,
42
+ e.nativeEvent.layout.width > e.nativeEvent.layout.height,
43
+ ]);
44
+ };
45
+ const [dim, setDim] = useState<[number, number, boolean]>([
46
+ Dimensions.get('window').width,
47
+ Dimensions.get('window').height,
48
+ Dimensions.get('window').width > Dimensions.get('window').height,
49
+ ]);
50
+ const isDesktop = dim[0] > dim[1] + 100;
42
51
 
43
52
  let {matrix, dims} = useMemo(
44
- () => layout(renderData.length, isDesktop()),
45
- [renderData.length, isDesktop()],
53
+ () => layout(renderData.length, isDesktop),
54
+ [renderData.length, isDesktop],
46
55
  );
47
56
 
48
57
  const setPinnedLayout = useSetPinnedLayout();
49
-
50
- //livestreaming audience will see this if no host joined the call
51
- if (
52
- $config.EVENT_MODE &&
53
- rtcProps?.role === ClientRole.Audience &&
54
- activeUids.length === 0
55
- ) {
56
- return (
57
- <View style={style.infoTextContainer}>
58
- <Text style={style.infoTextStyle}>Waiting for the host to join...</Text>
59
- </View>
60
- );
61
- }
62
-
63
58
  return (
64
- <View style={[style.full]}>
59
+ <View
60
+ style={[style.full, {paddingHorizontal: isDesktop ? 50 : 0}]}
61
+ onLayout={onLayout}>
65
62
  {matrix.map((r, ridx) => (
66
63
  <View style={style.gridRow} key={ridx}>
67
64
  {r.map((c, cidx) => (
68
65
  <Pressable
69
- disabled={renderData.length === 1}
70
66
  onPress={() => {
71
67
  if (!(ridx === 0 && cidx === 0)) {
72
68
  dispatch({
@@ -81,25 +77,7 @@ const GridVideo: layoutComponent = ({renderData}) => {
81
77
  marginHorizontal: 'auto',
82
78
  }}
83
79
  key={cidx}>
84
- <View
85
- style={[
86
- style.gridVideoContainerInner,
87
- //if only one item no margin required
88
- r?.length > 1
89
- ? //first item will have marginRight in the row
90
- cidx === 0
91
- ? {marginRight: 4}
92
- : //last item will have marginLeft in the row
93
- cidx === r?.length - 1
94
- ? {marginLeft: 4}
95
- : //middle item will have marginHorizontal
96
- {marginHorizontal: 4}
97
- : //if more than one row than add marginHorizontal
98
- //for ex: 7 people in the call with 3 column layout. last person tile should be aligned propert
99
- ridx > 1
100
- ? {marginHorizontal: 4}
101
- : {},
102
- ]}>
80
+ <View style={style.gridVideoContainerInner}>
103
81
  <RenderComponent uid={renderData[ridx * dims.c + cidx]} />
104
82
  </View>
105
83
  </Pressable>
@@ -113,32 +91,39 @@ const GridVideo: layoutComponent = ({renderData}) => {
113
91
  const style = StyleSheet.create({
114
92
  full: {
115
93
  flex: 1,
94
+ // padding: 20,
116
95
  },
117
96
  gridRow: {
118
97
  flex: 1,
119
98
  flexDirection: 'row',
120
99
  width: '100%',
121
- paddingVertical: 4,
100
+ paddingVertical: 10,
122
101
  },
123
102
  gridVideoContainerInner: {
124
- //borderRadius: 12,
103
+ // borderColor: '#fff',
104
+ // borderWidth:2,
105
+ // width: '100%',
106
+ borderRadius: 15,
125
107
  flex: 1,
126
108
  overflow: 'hidden',
109
+ // margin: 1,
110
+ marginHorizontal: 10,
127
111
  },
128
- infoTextContainer: {
129
- flex: 1,
130
- backgroundColor: $config.VIDEO_AUDIO_TILE_COLOR,
112
+ MicBackdrop: {
113
+ width: 20,
114
+ height: 20,
115
+ borderRadius: 10,
116
+ alignSelf: 'center',
117
+ marginHorizontal: 10,
118
+ marginRight: 20,
119
+ backgroundColor: $config.SECONDARY_FONT_COLOR,
120
+ display: 'flex',
131
121
  justifyContent: 'center',
132
- marginHorizontal: 'auto',
133
- marginVertical: 4,
134
122
  },
135
- infoTextStyle: {
136
- fontFamily: 'Source Sans Pro',
137
- fontWeight: '600',
138
- fontSize: 32,
139
- color: $config.VIDEO_AUDIO_TILE_AVATAR_COLOR,
140
- textAlign: 'center',
141
- padding: 12,
123
+ MicIcon: {
124
+ width: '80%',
125
+ height: '80%',
126
+ alignSelf: 'center',
142
127
  },
143
128
  });
144
129
  export default GridVideo;
@@ -9,76 +9,27 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import React, {useRef, useState} from 'react';
13
- import {View, StyleSheet, useWindowDimensions} from 'react-native';
12
+ import React from 'react';
13
+ import {View, Text, StyleSheet} from 'react-native';
14
14
  import SecondaryButton from '../atoms/SecondaryButton';
15
15
  import {useString} from '../utils/useString';
16
16
  import useRemoteMute, {MUTE_REMOTE_TYPE} from '../utils/useRemoteMute';
17
- import TertiaryButton from '../atoms/TertiaryButton';
18
- import Spacer from '../atoms/Spacer';
19
- import RemoteMutePopup from '../subComponents/RemoteMutePopup';
20
- import {calculatePosition} from '../utils/common';
21
17
 
22
18
  export interface MuteAllAudioButtonProps {
23
19
  render?: (onPress: () => void) => JSX.Element;
24
20
  }
25
21
 
26
22
  export const MuteAllAudioButton = (props: MuteAllAudioButtonProps) => {
27
- const [showAudioMuteModal, setShowAudioMuteModal] = useState(false);
28
- const audioBtnRef = useRef(null);
29
- const [modalPosition, setModalPosition] = useState({});
30
23
  const muteRemoteAudio = useRemoteMute();
31
24
  //commented for v1 release
32
25
  //const muteAllAudioButton = useString('muteAllAudioButton')();
33
- const muteAllAudioButton = 'Mute all';
34
- const onPressAction = () => muteRemoteAudio(MUTE_REMOTE_TYPE.audio);
35
- const {width: globalWidth, height: globalHeight} = useWindowDimensions();
36
- const showAudioModal = () => {
37
- audioBtnRef?.current?.measure(
38
- (_fx, _fy, localWidth, localHeight, px, py) => {
39
- const data = calculatePosition({
40
- px,
41
- py,
42
- localHeight,
43
- localWidth,
44
- globalHeight,
45
- globalWidth,
46
- extra: {
47
- bottom: 10,
48
- left: localWidth / 2,
49
- right: -(localWidth / 2),
50
- },
51
- popupWidth: 290,
52
- });
53
- setModalPosition(data);
54
- setShowAudioMuteModal(true);
55
- },
56
- );
57
- };
58
- const onPress = () => {
59
- showAudioModal();
60
- };
26
+ const muteAllAudioButton = 'Mute all audios';
27
+ const onPress = () => muteRemoteAudio(MUTE_REMOTE_TYPE.audio);
28
+
61
29
  return props?.render ? (
62
30
  props.render(onPress)
63
31
  ) : (
64
- <>
65
- <RemoteMutePopup
66
- type="audio"
67
- actionMenuVisible={showAudioMuteModal}
68
- setActionMenuVisible={setShowAudioMuteModal}
69
- name={null}
70
- modalPosition={modalPosition}
71
- onMutePress={() => {
72
- onPressAction();
73
- setShowAudioMuteModal(false);
74
- }}
75
- />
76
- <TertiaryButton
77
- setRef={(ref) => (audioBtnRef.current = ref)}
78
- onPress={onPress}
79
- text={muteAllAudioButton}
80
- />
81
- </>
32
+ <SecondaryButton onPress={onPress} text={muteAllAudioButton} />
82
33
  );
83
34
  };
84
35
 
@@ -86,83 +37,53 @@ export interface MuteAllVideoButtonProps {
86
37
  render?: (onPress: () => void) => JSX.Element;
87
38
  }
88
39
  export const MuteAllVideoButton = (props: MuteAllVideoButtonProps) => {
89
- const [showVideoMuteModal, setShowVideoMuteModal] = useState(false);
90
- const videoBtnRef = useRef(null);
91
- const [modalPosition, setModalPosition] = useState({});
92
40
  const muteRemoteVideo = useRemoteMute();
93
- const {width: globalWidth, height: globalHeight} = useWindowDimensions();
41
+
94
42
  //commented for v1 release
95
43
  //const muteAllVideoButton = useString('muteAllVideoButton')();
96
- const muteAllVideoButton = 'Turn off all cameras';
97
- const onPressAction = () => muteRemoteVideo(MUTE_REMOTE_TYPE.video);
98
- const showVideoModal = () => {
99
- videoBtnRef?.current?.measure(
100
- (_fx, _fy, localWidth, localHeight, px, py) => {
101
- const data = calculatePosition({
102
- px,
103
- py,
104
- localHeight,
105
- localWidth,
106
- globalHeight,
107
- globalWidth,
108
- extra: {
109
- bottom: 10,
110
- left: globalWidth < 720 ? 0 : localWidth / 2,
111
- right: globalHeight < 720 ? 0 : -(localWidth / 2),
112
- },
113
- popupWidth: 290,
114
- });
115
- setModalPosition(data);
116
- setShowVideoMuteModal(true);
117
- },
118
- );
119
- };
120
- const onPress = () => {
121
- showVideoModal();
122
- };
44
+ const muteAllVideoButton = 'Mute all videos';
45
+ const onPress = () => muteRemoteVideo(MUTE_REMOTE_TYPE.video);
46
+
123
47
  return props?.render ? (
124
48
  props.render(onPress)
125
49
  ) : (
126
- <>
127
- <RemoteMutePopup
128
- type="video"
129
- actionMenuVisible={showVideoMuteModal}
130
- setActionMenuVisible={setShowVideoMuteModal}
131
- name={null}
132
- modalPosition={modalPosition}
133
- onMutePress={() => {
134
- onPressAction();
135
- setShowVideoMuteModal(false);
136
- }}
137
- />
138
- <TertiaryButton
139
- setRef={(ref) => (videoBtnRef.current = ref)}
140
- onPress={onPress}
141
- text={muteAllVideoButton}
142
- />
143
- </>
50
+ <SecondaryButton onPress={onPress} text={muteAllVideoButton} />
144
51
  );
145
52
  };
146
53
 
147
54
  const HostControlView = () => {
148
55
  //commented for v1 release
149
56
  //const hostControlsLabel = useString('hostControlsLabel')();
150
-
57
+ const hostControlsLabel = 'Host Controls';
151
58
  return (
152
- <View style={style.container}>
153
- {!$config.AUDIO_ROOM && <MuteAllVideoButton />}
154
- <Spacer horizontal size={16} />
155
- <MuteAllAudioButton />
156
- </View>
59
+ <>
60
+ <Text style={style.heading}>{hostControlsLabel}</Text>
61
+ <View>
62
+ <View style={style.btnContainer}>
63
+ <MuteAllAudioButton />
64
+ </View>
65
+ {!$config.AUDIO_ROOM && (
66
+ <View style={style.btnContainer}>
67
+ <MuteAllVideoButton />
68
+ </View>
69
+ )}
70
+ </View>
71
+ </>
157
72
  );
158
73
  };
159
74
 
160
75
  const style = StyleSheet.create({
161
- container: {
162
- flexDirection: 'row',
163
- justifyContent: 'center',
76
+ heading: {
77
+ fontSize: 20,
78
+ fontWeight: '700',
79
+ color: $config.PRIMARY_FONT_COLOR,
80
+ // marginBottom: 20,
81
+ alignSelf: 'center',
82
+ },
83
+ btnContainer: {
84
+ alignItems: 'center',
85
+ marginVertical: 15,
164
86
  },
165
- btn: {},
166
87
  });
167
88
 
168
89
  export default HostControlView;