agora-appbuilder-core 3.0.10 → 3.0.12

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 (249) hide show
  1. package/Readme.md +0 -6
  2. package/package.json +2 -2
  3. package/template/_package-lock.json +4979 -7086
  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 -26
  36. package/template/index.js +0 -4
  37. package/template/index.rsdk.tsx +0 -1
  38. package/template/index.web.js +1 -7
  39. package/template/index.wsdk.tsx +1 -1
  40. package/template/ios/HelloWorld/Info.plist +1 -14
  41. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +0 -17
  42. package/template/metro.config.js +1 -1
  43. package/template/package.json +7 -21
  44. package/template/react-native-toast-message/index.d.ts +43 -43
  45. package/template/react-native-toast-message/src/colors/index.js +2 -3
  46. package/template/react-native-toast-message/src/components/base/index.js +59 -46
  47. package/template/react-native-toast-message/src/components/base/styles.js +32 -16
  48. package/template/react-native-toast-message/src/components/error.js +2 -3
  49. package/template/react-native-toast-message/src/components/info.js +2 -3
  50. package/template/react-native-toast-message/src/components/success.js +2 -3
  51. package/template/react-native-toast-message/src/index.js +31 -122
  52. package/template/react-native-toast-message/src/index.sdk.tsx +35 -125
  53. package/template/react-native-toast-message/src/styles.js +4 -3
  54. package/template/react-native-toast-message/src/styles.sdk.ts +4 -3
  55. package/template/src/App.tsx +0 -6
  56. package/template/src/AppWrapper.tsx +28 -63
  57. package/template/src/assets/icons.ts +102 -0
  58. package/template/src/atoms/HorizontalRule.tsx +1 -3
  59. package/template/src/atoms/PrimaryButton.tsx +26 -51
  60. package/template/src/atoms/SecondaryButton.tsx +5 -8
  61. package/template/src/atoms/TextInput.tsx +14 -12
  62. package/template/src/components/Chat.tsx +214 -86
  63. package/template/src/components/ChatContext.ts +1 -8
  64. package/template/src/components/ColorConfigure.tsx +1 -1
  65. package/template/src/components/ColorContext.ts +1 -1
  66. package/template/src/components/{Controls1.native.tsx → Controls.native.tsx} +4 -6
  67. package/template/src/components/Controls.tsx +42 -342
  68. package/template/src/components/DeviceConfigure.tsx +101 -461
  69. package/template/src/components/DeviceContext.tsx +4 -8
  70. package/template/src/components/EventsConfigure.tsx +7 -144
  71. package/template/src/components/GraphQLProvider.tsx +1 -1
  72. package/template/src/components/GridVideo.tsx +44 -59
  73. package/template/src/components/HostControlView.tsx +35 -114
  74. package/template/src/components/Navbar.tsx +398 -216
  75. package/template/src/components/NetworkQualityContext.tsx +20 -20
  76. package/template/src/components/ParticipantsView.tsx +154 -177
  77. package/template/src/components/PinnedVideo.tsx +120 -207
  78. package/template/src/components/Precall.native.tsx +119 -358
  79. package/template/src/components/Precall.tsx +135 -269
  80. package/template/src/components/RTMConfigure.tsx +4 -27
  81. package/template/src/components/Router.electron.ts +0 -1
  82. package/template/src/components/Router.native.ts +0 -1
  83. package/template/src/components/Router.sdk.ts +0 -1
  84. package/template/src/components/Router.ts +0 -1
  85. package/template/src/components/Settings.tsx +95 -26
  86. package/template/src/components/SettingsView.tsx +56 -251
  87. package/template/src/components/Share.tsx +273 -302
  88. package/template/src/components/StorageContext.tsx +3 -30
  89. package/template/src/components/chat-messages/useChatMessages.tsx +23 -69
  90. package/template/src/components/chat-ui/useChatUIControl.tsx +0 -7
  91. package/template/src/components/common/Error.tsx +6 -20
  92. package/template/src/components/common/Logo.tsx +15 -16
  93. package/template/src/components/contexts/LiveStreamDataContext.tsx +5 -10
  94. package/template/src/components/contexts/VideoMeetingDataContext.tsx +7 -37
  95. package/template/src/components/livestream/LiveStreamContext.tsx +36 -270
  96. package/template/src/components/livestream/Types.ts +14 -39
  97. package/template/src/components/livestream/index.ts +0 -1
  98. package/template/src/components/livestream/views/LiveStreamControls.tsx +4 -12
  99. package/template/src/components/participants/AllAudienceParticipants.tsx +30 -101
  100. package/template/src/components/participants/AllHostParticipants.tsx +34 -103
  101. package/template/src/components/participants/MeParticipant.tsx +38 -0
  102. package/template/src/components/participants/ParticipantName.tsx +7 -13
  103. package/template/src/components/participants/ParticipantSectionTitle.tsx +10 -35
  104. package/template/src/components/participants/RemoteParticipants.tsx +71 -0
  105. package/template/src/components/participants/ScreenshareParticipants.tsx +12 -144
  106. package/template/src/components/precall/{LocalMute1.native.tsx → LocalMute.native.tsx} +5 -21
  107. package/template/src/components/precall/LocalMute.tsx +14 -84
  108. package/template/src/components/precall/VideoPreview.native.tsx +3 -48
  109. package/template/src/components/precall/VideoPreview.tsx +7 -163
  110. package/template/src/components/precall/joinCallBtn.tsx +2 -15
  111. package/template/src/components/precall/meetingTitle.tsx +12 -15
  112. package/template/src/components/precall/selectDevice.tsx +21 -1
  113. package/template/src/components/precall/textInput.tsx +4 -32
  114. package/template/src/components/precall/usePreCall.tsx +0 -16
  115. package/template/src/components/styles.ts +21 -42
  116. package/template/src/components/useShareLink.tsx +14 -12
  117. package/template/src/language/default-labels/precallScreenLabels.ts +3 -3
  118. package/template/src/pages/Authenticate.tsx +15 -5
  119. package/template/src/pages/Create.tsx +165 -293
  120. package/template/src/pages/Join.tsx +67 -93
  121. package/template/src/pages/VideoCall.tsx +64 -89
  122. package/template/src/pages/video-call/DefaultLayouts.ts +4 -4
  123. package/template/src/pages/video-call/NameWithMicIcon.tsx +44 -120
  124. package/template/src/pages/video-call/RenderComponent.tsx +2 -3
  125. package/template/src/pages/video-call/VideoCallScreen.tsx +9 -45
  126. package/template/src/pages/video-call/VideoComponent.tsx +3 -18
  127. package/template/src/pages/video-call/VideoRenderer.tsx +60 -218
  128. package/template/src/rtm-events/constants.ts +0 -2
  129. package/template/src/subComponents/ChatBubble.tsx +83 -123
  130. package/template/src/subComponents/ChatContainer.tsx +84 -257
  131. package/template/src/subComponents/ChatInput.tsx +46 -61
  132. package/template/src/subComponents/Checkbox.native.tsx +5 -16
  133. package/template/src/subComponents/Checkbox.tsx +2 -2
  134. package/template/src/subComponents/CopyJoinInfo.tsx +58 -36
  135. package/template/src/subComponents/FallbackLogo.tsx +40 -122
  136. package/template/src/subComponents/LanguageSelector.tsx +1 -1
  137. package/template/src/subComponents/{LayoutIconDropdown1.native.tsx → LayoutIconDropdown.native.tsx} +18 -4
  138. package/template/src/subComponents/LayoutIconDropdown.tsx +134 -131
  139. package/template/src/subComponents/LocalAudioMute.tsx +27 -119
  140. package/template/src/subComponents/LocalEndCall.tsx +33 -71
  141. package/template/src/subComponents/LocalSwitchCamera.tsx +30 -17
  142. package/template/src/subComponents/LocalVideoMute.tsx +27 -117
  143. package/template/src/subComponents/Logo.tsx +4 -3
  144. package/template/src/subComponents/LogoutButton.tsx +1 -1
  145. package/template/src/subComponents/NetworkQualityPill.tsx +63 -60
  146. package/template/src/subComponents/OpenInNativeButton.tsx +3 -3
  147. package/template/src/subComponents/Recording.tsx +29 -28
  148. package/template/src/subComponents/RemoteAudioMute.tsx +29 -83
  149. package/template/src/subComponents/RemoteEndCall.tsx +5 -8
  150. package/template/src/subComponents/RemoteVideoMute.tsx +21 -74
  151. package/template/src/subComponents/ScreenShareNotice.tsx +8 -83
  152. package/template/src/subComponents/SelectDevice.tsx +61 -404
  153. package/template/src/subComponents/SelectOAuth.tsx +8 -9
  154. package/template/src/subComponents/ToastConfig.tsx +10 -150
  155. package/template/src/subComponents/chat/ChatParticipants.tsx +78 -187
  156. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +32 -95
  157. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +33 -29
  158. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +6 -6
  159. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +11 -24
  160. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +10 -17
  161. package/template/src/subComponents/recording/useRecording.tsx +27 -79
  162. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +70 -52
  163. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +2 -11
  164. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +4 -26
  165. package/template/src/utils/common.tsx +1 -155
  166. package/template/src/utils/index.tsx +0 -19
  167. package/template/src/utils/isMobileOrTablet.ts +2 -7
  168. package/template/src/utils/useButtonTemplate.tsx +0 -1
  169. package/template/src/utils/useMuteToggleLocal.ts +3 -54
  170. package/template/web/index.html +0 -5
  171. package/template/webpack.commons.js +8 -13
  172. package/template/webpack.web.config.js +0 -1
  173. package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +0 -11
  174. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +0 -24
  175. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +0 -11
  176. package/template/android/app/src/main/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  177. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  178. package/template/android/app/src/main/res/values/colors.xml +0 -7
  179. package/template/react-native-toast-message/src/components/checkbox.js +0 -178
  180. package/template/react-native.config.js +0 -7
  181. package/template/src/assets/font-styles.css +0 -329
  182. package/template/src/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  183. package/template/src/assets/fonts/icomoon.ttf +0 -0
  184. package/template/src/assets/permission.png +0 -0
  185. package/template/src/assets/selection.json +0 -1
  186. package/template/src/atoms/ActionMenu.tsx +0 -236
  187. package/template/src/atoms/AnimatedActiveSpeaker.native.tsx +0 -71
  188. package/template/src/atoms/AnimatedActiveSpeaker.tsx +0 -84
  189. package/template/src/atoms/AnimatedRings.native.tsx +0 -68
  190. package/template/src/atoms/AnimatedRings.tsx +0 -70
  191. package/template/src/atoms/Card.tsx +0 -61
  192. package/template/src/atoms/CircularProgress.native.tsx +0 -121
  193. package/template/src/atoms/CircularProgress.tsx +0 -102
  194. package/template/src/atoms/CustomIcon.tsx +0 -88
  195. package/template/src/atoms/CustomSwitch.tsx +0 -287
  196. package/template/src/atoms/Dropdown.tsx +0 -306
  197. package/template/src/atoms/IconButton.tsx +0 -162
  198. package/template/src/atoms/ImageIcon.tsx +0 -98
  199. package/template/src/atoms/InfoBubble.tsx +0 -291
  200. package/template/src/atoms/Input.tsx +0 -87
  201. package/template/src/atoms/InviteInfo.tsx +0 -166
  202. package/template/src/atoms/LinkButton.tsx +0 -28
  203. package/template/src/atoms/OutlineButton.tsx +0 -61
  204. package/template/src/atoms/ParticipantsCount.tsx +0 -73
  205. package/template/src/atoms/Popup.tsx +0 -147
  206. package/template/src/atoms/RecordingInfo.tsx +0 -49
  207. package/template/src/atoms/Spacer.tsx +0 -22
  208. package/template/src/atoms/TertiaryButton.tsx +0 -78
  209. package/template/src/atoms/Toggle.tsx +0 -47
  210. package/template/src/atoms/Tooltip.native.tsx +0 -65
  211. package/template/src/atoms/Tooltip.tsx +0 -94
  212. package/template/src/atoms/UserAvatar.tsx +0 -60
  213. package/template/src/components/CommonStyles.ts +0 -44
  214. package/template/src/components/ToastComponent.tsx +0 -8
  215. package/template/src/components/participants/Participant.tsx +0 -302
  216. package/template/src/components/participants/UserActionMenuOptions.tsx +0 -398
  217. package/template/src/components/popups/InvitePopup.tsx +0 -115
  218. package/template/src/components/popups/StopRecordingPopup.tsx +0 -114
  219. package/template/src/components/precall/PermissionHelper.native.tsx +0 -5
  220. package/template/src/components/precall/PermissionHelper.tsx +0 -126
  221. package/template/src/components/precall/PreCallSettings.tsx +0 -52
  222. package/template/src/components/useToast.tsx +0 -41
  223. package/template/src/components/useVideoCall.tsx +0 -65
  224. package/template/src/pages/Endcall.tsx +0 -148
  225. package/template/src/pages/video-call/ActionSheet.native.tsx +0 -215
  226. package/template/src/pages/video-call/ActionSheet.tsx +0 -226
  227. package/template/src/pages/video-call/ActionSheetContent.tsx +0 -479
  228. package/template/src/pages/video-call/ActionSheetHandle.tsx +0 -38
  229. package/template/src/pages/video-call/ActionSheetStyles.css +0 -138
  230. package/template/src/pages/video-call/SidePanelHeader.tsx +0 -190
  231. package/template/src/pages/video-call/VideoCallMobileView.tsx +0 -139
  232. package/template/src/pages/video-call/VideoCallScreen.native.tsx +0 -37
  233. package/template/src/subComponents/ChatInput.ios.tsx +0 -237
  234. package/template/src/subComponents/EndcallPopup.tsx +0 -107
  235. package/template/src/subComponents/LayoutIconButton.tsx +0 -201
  236. package/template/src/subComponents/RemoteMutePopup.tsx +0 -193
  237. package/template/src/subComponents/RemoveMeetingPopup.tsx +0 -109
  238. package/template/src/subComponents/RemoveScreensharePopup.tsx +0 -109
  239. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +0 -207
  240. package/template/src/subComponents/SidePanelHeader.tsx +0 -112
  241. package/template/src/theme/index.ts +0 -46
  242. package/template/src/utils/PlatformWrapper.tsx +0 -21
  243. package/template/src/utils/hexadecimalTransparency.ts +0 -108
  244. package/template/src/utils/pendingStateUpdateHelper.ts +0 -19
  245. package/template/src/utils/useFocus.tsx +0 -46
  246. package/template/src/utils/useIsActiveSpeaker.ts +0 -27
  247. package/template/src/utils/useIsHandRaised.ts +0 -13
  248. package/template/src/utils/useRemoteEndScreenshare.ts +0 -26
  249. 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;