agora-appbuilder-core 4.0.0 → 4.0.2

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 (475) hide show
  1. package/package.json +3 -3
  2. package/template/.bundle/config +2 -0
  3. package/template/Gemfile +4 -0
  4. package/template/Gulpfile.js +29 -29
  5. package/template/_eslintrc.js +3 -3
  6. package/template/_gitignore +12 -11
  7. package/template/_package-lock.json +28491 -23647
  8. package/template/_prettierrc.js +2 -2
  9. package/template/agora-rn-uikit/.eslintrc.js +5 -0
  10. package/template/agora-rn-uikit/package.json +14 -14
  11. package/template/agora-rn-uikit/src/AgoraUIKit.tsx +6 -6
  12. package/template/agora-rn-uikit/src/Contexts/ContentContext.tsx +10 -0
  13. package/template/agora-rn-uikit/src/Contexts/DispatchContext.tsx +22 -0
  14. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +6 -6
  15. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +79 -38
  16. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +26 -17
  17. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +1 -0
  18. package/template/agora-rn-uikit/src/Controls/Icons.ts +45 -0
  19. package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -4
  20. package/template/agora-rn-uikit/src/Controls/Local/FullScreen.tsx +3 -1
  21. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +5 -2
  22. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +5 -2
  23. package/template/agora-rn-uikit/src/Controls/Local/Recording.tsx +0 -2
  24. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +7 -6
  25. package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +5 -5
  26. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +5 -4
  27. package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +3 -1
  28. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +5 -4
  29. package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +2 -2
  30. package/template/agora-rn-uikit/src/Reducer/ActiveSpeaker.ts +30 -0
  31. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +8 -7
  32. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +8 -7
  33. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +6 -7
  34. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +7 -8
  35. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +9 -9
  36. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +7 -8
  37. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +14 -13
  38. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +6 -7
  39. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +6 -7
  40. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +5 -6
  41. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +20 -3
  42. package/template/agora-rn-uikit/src/Reducer/UserSecondaryPin.ts +23 -0
  43. package/template/agora-rn-uikit/src/Reducer/index.ts +2 -1
  44. package/template/agora-rn-uikit/src/Rtc/Create.tsx +138 -100
  45. package/template/agora-rn-uikit/src/Rtc/Join.tsx +55 -28
  46. package/template/agora-rn-uikit/src/RtcConfigure.tsx +177 -77
  47. package/template/agora-rn-uikit/src/Utils/isBotUser.ts +15 -0
  48. package/template/agora-rn-uikit/src/Utils/quality.tsx +8 -0
  49. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +56 -12
  50. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +47 -17
  51. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +19 -11
  52. package/template/agora-rn-uikit/src/index.ts +15 -9
  53. package/template/android/app/build.gradle +59 -156
  54. package/template/android/app/src/debug/AndroidManifest.xml +6 -1
  55. package/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java +7 -4
  56. package/template/android/app/src/main/AndroidManifest.xml +6 -19
  57. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  58. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +17 -0
  59. package/template/android/app/src/main/java/com/helloworld/MainApplication.java +22 -36
  60. package/template/android/app/src/main/java/com/helloworld/SSLPinningFactory.java +30 -0
  61. package/template/android/app/src/main/res/values/strings.xml +3 -0
  62. package/template/android/app/src/release/java/com/helloworld/ReactNativeFlipper.java +20 -0
  63. package/template/android/build.gradle +19 -33
  64. package/template/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  65. package/template/android/gradle/wrapper/gradle-wrapper.properties +3 -2
  66. package/template/android/gradle.properties +18 -4
  67. package/template/android/gradlew +165 -104
  68. package/template/android/gradlew.bat +12 -23
  69. package/template/android/settings.gradle +1 -0
  70. package/template/bridge/rtc/webNg/RtcEngine.ts +200 -70
  71. package/template/bridge/rtc/webNg/{SurfaceView.tsx → RtcSurfaceView.tsx} +20 -26
  72. package/template/bridge/rtc/webNg/Types.ts +20 -5
  73. package/template/bridge/rtc/webNg/index.ts +81 -14
  74. package/template/bridge/rtm/web/index.ts +5 -3
  75. package/template/configTransform.js +16 -1
  76. package/template/customization-api/action-library.ts +4 -16
  77. package/template/customization-api/app-state.ts +15 -8
  78. package/template/customization-api/customEvents.ts +7 -2
  79. package/template/customization-api/customize.ts +1 -1
  80. package/template/customization-api/index.ts +4 -0
  81. package/template/customization-api/sub-components.ts +17 -16
  82. package/template/customization-api/temp.ts +52 -0
  83. package/template/customization-api/typeDefinition.ts +34 -46
  84. package/template/customization-api/types.ts +26 -0
  85. package/template/customization-api/utils.ts +4 -0
  86. package/template/customization-implementation/createHook.ts +24 -6
  87. package/template/customization-implementation/index.ts +1 -2
  88. package/template/customization-implementation/useCustomization.tsx +5 -7
  89. package/template/defaultConfig.js +72 -0
  90. package/template/global.d.ts +14 -1
  91. package/template/index.js +1 -4
  92. package/template/index.web.js +0 -5
  93. package/template/index.wsdk.tsx +1 -12
  94. package/template/ios/.xcode.env +11 -0
  95. package/template/ios/HelloWorld/AppDelegate.h +2 -4
  96. package/template/ios/HelloWorld/AppDelegate.mm +64 -0
  97. package/template/ios/HelloWorld/HelloWorldDebug.entitlements +10 -0
  98. package/template/ios/HelloWorld/Info.plist +8 -2
  99. package/template/ios/HelloWorld/main.m +2 -1
  100. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +533 -17
  101. package/template/ios/HelloWorld.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  102. package/template/ios/HelloWorld.xcworkspace/contents.xcworkspacedata +10 -0
  103. package/template/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  104. package/template/ios/HelloWorldTests/HelloWorldTests.m +14 -13
  105. package/template/ios/HelloWorldTests/Info.plist +2 -2
  106. package/template/ios/Podfile +54 -20
  107. package/template/ios/Podfile.lock +809 -0
  108. package/template/ios/ScreenSharing/Info.plist +15 -0
  109. package/template/ios/ScreenSharing/SampleHandler.h +9 -0
  110. package/template/ios/ScreenSharing/SampleHandler.m +70 -0
  111. package/template/jest.config.js +4 -0
  112. package/template/metro.config.js +7 -32
  113. package/template/package.json +53 -39
  114. package/template/react-native-toast-message/index.d.ts +3 -1
  115. package/template/react-native-toast-message/index.js +1 -0
  116. package/template/react-native-toast-message/src/components/base/index.js +20 -32
  117. package/template/react-native-toast-message/src/components/base/styles.js +18 -21
  118. package/template/react-native-toast-message/src/components/checkbox.js +24 -19
  119. package/template/react-native-toast-message/src/index.js +3 -1
  120. package/template/react-native-toast-message/src/index.sdk.tsx +4 -1
  121. package/template/src/App.tsx +53 -69
  122. package/template/src/AppRoutes.tsx +90 -0
  123. package/template/src/AppWrapper.tsx +42 -25
  124. package/template/src/SDKAppWrapper.tsx +90 -57
  125. package/template/src/app-state/useLocalUserInfo.ts +3 -3
  126. package/template/src/app-state/useNoiseSupression.native.tsx +67 -0
  127. package/template/src/app-state/useNoiseSupression.tsx +107 -0
  128. package/template/src/app-state/useVideoQuality.tsx +39 -0
  129. package/template/src/assets/font-styles.css +175 -3
  130. package/template/src/assets/fonts/icomoon.ttf +0 -0
  131. package/template/src/assets/selection.json +1 -1
  132. package/template/src/atoms/ActionMenu.tsx +50 -11
  133. package/template/src/atoms/Avatar.tsx +51 -0
  134. package/template/src/atoms/Card.tsx +21 -8
  135. package/template/src/atoms/Carousel.native.tsx +105 -0
  136. package/template/src/atoms/Carousel.tsx +103 -0
  137. package/template/src/atoms/Checkbox.tsx +98 -0
  138. package/template/src/atoms/CircularProgress.tsx +0 -1
  139. package/template/src/atoms/ClipboardIconButton.tsx +91 -0
  140. package/template/src/atoms/CustomIcon.tsx +46 -0
  141. package/template/src/atoms/DropDownMulti.tsx +349 -0
  142. package/template/src/atoms/Dropdown.tsx +3 -3
  143. package/template/src/atoms/IconButton.tsx +52 -9
  144. package/template/src/atoms/ImageIcon.tsx +18 -5
  145. package/template/src/atoms/InlineNotification.tsx +81 -0
  146. package/template/src/atoms/InviteInfo.tsx +4 -4
  147. package/template/src/atoms/MeetingLink.tsx +160 -0
  148. package/template/src/atoms/ParticipantsCount.tsx +20 -8
  149. package/template/src/atoms/Popup.tsx +49 -27
  150. package/template/src/atoms/PrimaryButton.tsx +19 -5
  151. package/template/src/atoms/RecordingInfo.tsx +8 -5
  152. package/template/src/atoms/SecondaryButton.tsx +2 -0
  153. package/template/src/atoms/Spacer.tsx +1 -0
  154. package/template/src/atoms/TertiaryButton.tsx +35 -5
  155. package/template/src/atoms/TextInput.tsx +2 -1
  156. package/template/src/atoms/Toolbar.tsx +102 -0
  157. package/template/src/atoms/ToolbarItem.tsx +85 -0
  158. package/template/src/atoms/ToolbarMenu.tsx +40 -0
  159. package/template/src/atoms/ToolbarMenuItem.tsx +104 -0
  160. package/template/src/atoms/ToolbarPreset.tsx +71 -0
  161. package/template/src/atoms/Tooltip.tsx +30 -13
  162. package/template/src/atoms/pagination/Pagination.tsx +127 -0
  163. package/template/src/atoms/pagination/usePagination.tsx +88 -0
  164. package/template/src/auth/AuthProvider.tsx +500 -0
  165. package/template/src/auth/AuthRoute.tsx +94 -0
  166. package/template/src/auth/IDPAuth.electron.tsx +31 -0
  167. package/template/src/auth/IDPAuth.tsx +67 -0
  168. package/template/src/auth/IDPLogoutComponent.tsx +158 -0
  169. package/template/src/auth/UserCancelPopup.tsx +115 -0
  170. package/template/src/auth/config.ts +52 -0
  171. package/template/src/auth/openIDPURL.electron.tsx +39 -0
  172. package/template/src/auth/openIDPURL.native.tsx +51 -0
  173. package/template/src/auth/openIDPURL.tsx +20 -0
  174. package/template/src/auth/useIDPAuth.electron.tsx +65 -0
  175. package/template/src/auth/useIDPAuth.native.tsx +70 -0
  176. package/template/src/auth/useIDPAuth.tsx +63 -0
  177. package/template/src/auth/useTokenAuth.tsx +194 -0
  178. package/template/src/components/Chat.tsx +92 -72
  179. package/template/src/components/ChatContext.ts +2 -0
  180. package/template/src/components/ColorConfigure.tsx +0 -1
  181. package/template/src/components/CommonStyles.ts +9 -2
  182. package/template/src/components/Controls.tsx +914 -182
  183. package/template/src/components/Controls1.native.tsx +9 -5
  184. package/template/src/components/DeviceConfigure.native.tsx +2 -2
  185. package/template/src/components/DeviceConfigure.tsx +400 -149
  186. package/template/src/components/DeviceContext.tsx +2 -0
  187. package/template/src/components/EventsConfigure.tsx +722 -82
  188. package/template/src/components/GraphQLProvider.tsx +82 -39
  189. package/template/src/components/GridVideo.tsx +30 -16
  190. package/template/src/components/HostControlView.tsx +11 -14
  191. package/template/src/components/JoinPhrase.tsx +0 -1
  192. package/template/src/components/Leftbar.tsx +110 -0
  193. package/template/src/components/Navbar.tsx +305 -147
  194. package/template/src/components/NavbarMobile.tsx +119 -0
  195. package/template/src/components/Navigation.native.tsx +1 -15
  196. package/template/src/components/{Settings.native.tsx → Navigation.sdk.tsx} +17 -6
  197. package/template/src/components/NetworkQualityContext.tsx +12 -6
  198. package/template/src/components/ParticipantsView.tsx +63 -56
  199. package/template/src/components/PinnedVideo.tsx +191 -119
  200. package/template/src/components/Precall.native.tsx +177 -72
  201. package/template/src/components/Precall.tsx +247 -78
  202. package/template/src/components/RTMConfigure.tsx +205 -67
  203. package/template/src/components/Rightbar.tsx +112 -0
  204. package/template/src/components/Router.electron.ts +1 -0
  205. package/template/src/components/Router.native.ts +1 -0
  206. package/template/src/components/Router.sdk.ts +1 -0
  207. package/template/src/components/Router.ts +1 -0
  208. package/template/src/components/SdkApiContext.tsx +313 -0
  209. package/template/src/components/SdkMuteToggleListener.tsx +88 -0
  210. package/template/src/components/SessionContext.tsx +0 -1
  211. package/template/src/components/Settings.tsx +33 -4
  212. package/template/src/components/SettingsView.tsx +44 -9
  213. package/template/src/components/Share.tsx +152 -74
  214. package/template/src/components/StorageContext.tsx +23 -6
  215. package/template/src/components/ToastComponent.tsx +10 -1
  216. package/template/src/components/WhiteboardLayout.tsx +291 -0
  217. package/template/src/components/chat-messages/useChatMessages.tsx +454 -239
  218. package/template/src/components/chat-ui/{useChatUIControl.tsx → useChatUIControls.tsx} +29 -29
  219. package/template/src/components/common/Error.tsx +2 -0
  220. package/template/src/components/common/Logo.tsx +2 -2
  221. package/template/src/components/contexts/LiveStreamDataContext.tsx +13 -12
  222. package/template/src/components/contexts/ScreenShareContext.tsx +15 -1
  223. package/template/src/components/contexts/VideoMeetingDataContext.tsx +6 -6
  224. package/template/src/components/contexts/WaitingRoomContext.tsx +50 -0
  225. package/template/src/components/contexts/WhiteboardContext.tsx +54 -54
  226. package/template/src/components/disable-chat/useDisableChat.tsx +32 -0
  227. package/template/src/components/livestream/LiveStreamContext.tsx +314 -220
  228. package/template/src/components/livestream/Types.ts +36 -20
  229. package/template/src/components/livestream/views/LiveStreamAttendeeLandingTile.tsx +295 -0
  230. package/template/src/components/livestream/views/LiveStreamControls.tsx +5 -10
  231. package/template/src/components/meeting-info-invite/MeetingInfo.tsx +82 -0
  232. package/template/src/components/meeting-info-invite/MeetingInfoCardHeader.tsx +86 -0
  233. package/template/src/components/meeting-info-invite/MeetingInfoGridTile.tsx +218 -0
  234. package/template/src/components/meeting-info-invite/MeetingInfoLinks.tsx +122 -0
  235. package/template/src/components/participants/AllAudienceParticipants.tsx +19 -20
  236. package/template/src/components/participants/AllHostParticipants.tsx +20 -19
  237. package/template/src/components/participants/Participant.tsx +45 -16
  238. package/template/src/components/participants/ParticipantSectionTitle.tsx +5 -2
  239. package/template/src/components/participants/ScreenshareParticipants.tsx +17 -19
  240. package/template/src/components/participants/UserActionMenuOptions.tsx +173 -62
  241. package/template/src/components/participants/WaitingRoomParticipants.tsx +74 -0
  242. package/template/src/components/popups/InvitePopup.tsx +110 -45
  243. package/template/src/components/popups/StartScreenSharePopup.native.tsx +182 -0
  244. package/template/src/components/popups/StartScreenSharePopup.tsx +6 -0
  245. package/template/src/components/popups/StopRecordingPopup.tsx +11 -5
  246. package/template/src/components/popups/StopScreenSharePopup.native.tsx +135 -0
  247. package/template/src/components/popups/StopScreenSharePopup.tsx +6 -0
  248. package/template/src/components/popups/WhiteboardClearAllPopup.tsx +123 -0
  249. package/template/src/components/precall/LocalMute.tsx +69 -45
  250. package/template/src/components/precall/PermissionHelper.tsx +56 -28
  251. package/template/src/components/precall/PreCallSettings.tsx +1 -0
  252. package/template/src/components/precall/VideoFallback.tsx +173 -0
  253. package/template/src/components/precall/VideoPreview.native.tsx +19 -53
  254. package/template/src/components/precall/VideoPreview.tsx +29 -164
  255. package/template/src/components/precall/index.tsx +2 -0
  256. package/template/src/components/precall/joinCallBtn.native.tsx +12 -5
  257. package/template/src/components/precall/joinCallBtn.tsx +13 -4
  258. package/template/src/components/precall/joinWaitingRoomBtn.native.tsx +210 -0
  259. package/template/src/components/precall/joinWaitingRoomBtn.tsx +250 -0
  260. package/template/src/components/precall/meetingTitle.tsx +37 -11
  261. package/template/src/components/precall/selectDevice.tsx +5 -5
  262. package/template/src/components/precall/textInput.tsx +17 -19
  263. package/template/src/components/precall/usePreCall.tsx +33 -1
  264. package/template/src/components/recording-bot/RecordingBotRoute.tsx +42 -0
  265. package/template/src/components/recordings/RecordingsDateTable.tsx +62 -0
  266. package/template/src/components/recordings/RecordingsModal.tsx +135 -0
  267. package/template/src/components/recordings/ViewRecordingsModal.tsx +51 -0
  268. package/template/src/components/recordings/recording-table.tsx +154 -0
  269. package/template/src/components/recordings/style.ts +183 -0
  270. package/template/src/components/recordings/utils.ts +80 -0
  271. package/template/src/components/room-info/useRoomInfo.tsx +128 -0
  272. package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
  273. package/template/src/components/useShareLink.tsx +28 -63
  274. package/template/src/components/useUserPreference.tsx +82 -16
  275. package/template/src/components/useVideoCall.tsx +93 -1
  276. package/template/src/components/virtual-background/VBButton.tsx +64 -0
  277. package/template/src/components/virtual-background/VBCard.native.tsx +282 -0
  278. package/template/src/components/virtual-background/VBCard.tsx +272 -0
  279. package/template/src/components/virtual-background/VBPanel.tsx +279 -0
  280. package/template/src/components/virtual-background/VButils.native.ts +37 -0
  281. package/template/src/components/virtual-background/VButils.ts +104 -0
  282. package/template/src/components/virtual-background/VideoPreview.native.tsx +43 -0
  283. package/template/src/components/virtual-background/VideoPreview.tsx +106 -0
  284. package/template/src/components/virtual-background/imagePaths.ts +87 -0
  285. package/template/src/components/virtual-background/images/beachImageBase64.ts +1 -0
  286. package/template/src/components/virtual-background/images/bedroomImageBase64.ts +1 -0
  287. package/template/src/components/virtual-background/images/bookImageBase64.ts +1 -0
  288. package/template/src/components/virtual-background/images/earthImageBase64.ts +1 -0
  289. package/template/src/components/virtual-background/images/index.ts +37 -0
  290. package/template/src/components/virtual-background/images/lampImageBase64.ts +1 -0
  291. package/template/src/components/virtual-background/images/mountainsImageBase64.ts +1 -0
  292. package/template/src/components/virtual-background/images/office1ImageBase64.ts +1 -0
  293. package/template/src/components/virtual-background/images/officeImageBase64.ts +1 -0
  294. package/template/src/components/virtual-background/images/plantsImageBase64.ts +1 -0
  295. package/template/src/components/virtual-background/images/skyImageBase64.ts +1 -0
  296. package/template/src/components/virtual-background/images/wallImageBase64.ts +1 -0
  297. package/template/src/components/virtual-background/useVB.native.tsx +185 -0
  298. package/template/src/components/virtual-background/useVB.tsx +267 -0
  299. package/template/src/components/whiteboard/StrokeWidthTool.tsx +137 -0
  300. package/template/src/components/whiteboard/WhiteboardButton.tsx +93 -0
  301. package/template/src/components/whiteboard/WhiteboardCanvas.tsx +99 -0
  302. package/template/src/components/whiteboard/WhiteboardConfigure.native.tsx +148 -0
  303. package/template/src/components/whiteboard/WhiteboardConfigure.tsx +446 -0
  304. package/template/src/components/whiteboard/WhiteboardCursor.tsx +152 -0
  305. package/template/src/components/whiteboard/WhiteboardToolBox.tsx +1246 -0
  306. package/template/src/components/whiteboard/WhiteboardView.native.tsx +188 -0
  307. package/template/src/components/whiteboard/WhiteboardView.tsx +81 -0
  308. package/template/src/components/whiteboard/WhiteboardWidget.tsx +685 -0
  309. package/template/src/components/whiteboard/WhiteboardWrapper.tsx +38 -0
  310. package/template/src/language/default-labels/commonLabels.ts +51 -14
  311. package/template/src/language/default-labels/createScreenLabels.ts +97 -17
  312. package/template/src/language/default-labels/joinScreenLabels.ts +45 -6
  313. package/template/src/language/default-labels/precallScreenLabels.ts +149 -25
  314. package/template/src/language/default-labels/shareLinkScreenLabels.ts +85 -37
  315. package/template/src/language/default-labels/videoCallScreenLabels.ts +1195 -158
  316. package/template/src/pages/Create.tsx +136 -106
  317. package/template/src/pages/Endcall.tsx +2 -2
  318. package/template/src/pages/Join.tsx +82 -40
  319. package/template/src/pages/Login.tsx +26 -0
  320. package/template/src/pages/VideoCall.tsx +329 -127
  321. package/template/src/pages/video-call/ActionSheet.native.tsx +54 -6
  322. package/template/src/pages/video-call/ActionSheet.tsx +55 -15
  323. package/template/src/pages/video-call/ActionSheetContent.tsx +498 -308
  324. package/template/src/pages/video-call/ActionSheetHandle.tsx +7 -1
  325. package/template/src/pages/video-call/DefaultLayouts.ts +20 -8
  326. package/template/src/pages/video-call/NameWithMicIcon.tsx +41 -64
  327. package/template/src/pages/video-call/PinchableView.tsx +119 -0
  328. package/template/src/pages/video-call/RenderComponent.tsx +14 -30
  329. package/template/src/pages/video-call/SidePanelHeader.tsx +227 -29
  330. package/template/src/pages/video-call/VideoCallMobileView.tsx +231 -89
  331. package/template/src/pages/video-call/VideoCallScreen.native.tsx +3 -2
  332. package/template/src/pages/video-call/VideoCallScreen.tsx +233 -84
  333. package/template/src/pages/video-call/VideoCallScreenWrapper.tsx +41 -0
  334. package/template/src/pages/video-call/VideoComponent.tsx +60 -8
  335. package/template/src/pages/video-call/VideoRenderer.tsx +343 -57
  336. package/template/src/pages/video-call/VisibilitySensor.tsx +104 -0
  337. package/template/src/pages/video-call/ZoomableWrapper.native.tsx +34 -0
  338. package/template/src/pages/video-call/ZoomableWrapper.tsx +5 -0
  339. package/template/src/pages/video-call/index.ts +42 -8
  340. package/template/src/rtm/RTMEngine.ts +17 -4
  341. package/template/src/rtm-events/constants.ts +21 -3
  342. package/template/src/rtm-events-api/Events.ts +7 -4
  343. package/template/src/rtm-events-api/LocalEvents.ts +14 -0
  344. package/template/src/rtm-events-api/types.ts +5 -5
  345. package/template/src/selection.json +1 -0
  346. package/template/src/subComponents/ChatBubble.tsx +87 -67
  347. package/template/src/subComponents/ChatContainer.tsx +70 -49
  348. package/template/src/subComponents/ChatInput.ios.tsx +32 -85
  349. package/template/src/subComponents/ChatInput.tsx +31 -80
  350. package/template/src/subComponents/Checkbox.native.tsx +46 -46
  351. package/template/src/subComponents/Checkbox.tsx +7 -6
  352. package/template/src/subComponents/CopyJoinInfo.tsx +31 -11
  353. package/template/src/subComponents/EndcallPopup.tsx +83 -12
  354. package/template/src/subComponents/FallbackLogo.tsx +2 -2
  355. package/template/src/subComponents/LanguageSelector.tsx +34 -30
  356. package/template/src/subComponents/LayoutIconButton.tsx +34 -17
  357. package/template/src/subComponents/LayoutIconDropdown.tsx +21 -8
  358. package/template/src/subComponents/Loading.tsx +60 -0
  359. package/template/src/subComponents/LocalAudioMute.tsx +87 -34
  360. package/template/src/subComponents/LocalEndCall.tsx +61 -24
  361. package/template/src/subComponents/LocalSwitchCamera.tsx +57 -13
  362. package/template/src/subComponents/LocalVideoMute.tsx +105 -36
  363. package/template/src/subComponents/LogoutButton.tsx +1 -1
  364. package/template/src/subComponents/NetworkQualityPill.tsx +22 -38
  365. package/template/src/subComponents/Recording.tsx +29 -9
  366. package/template/src/subComponents/RemoteAudioMute.tsx +5 -5
  367. package/template/src/subComponents/RemoteMutePopup.tsx +55 -14
  368. package/template/src/subComponents/RemoteVideoMute.tsx +5 -5
  369. package/template/src/subComponents/RemoveMeetingPopup.tsx +19 -6
  370. package/template/src/subComponents/RemoveScreensharePopup.tsx +20 -5
  371. package/template/src/subComponents/ScreenShareNotice.tsx +11 -6
  372. package/template/src/subComponents/SelectDevice.tsx +103 -34
  373. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +9 -6
  374. package/template/src/subComponents/SidePanelButtons.ts +0 -3
  375. package/template/src/subComponents/SidePanelEnum.tsx +2 -0
  376. package/template/src/subComponents/SidePanelHeader.tsx +97 -63
  377. package/template/src/subComponents/ToastConfig.tsx +70 -61
  378. package/template/src/subComponents/caption/Caption.tsx +132 -0
  379. package/template/src/subComponents/caption/CaptionContainer.tsx +302 -0
  380. package/template/src/subComponents/caption/CaptionIcon.tsx +111 -0
  381. package/template/src/subComponents/caption/CaptionText.tsx +182 -0
  382. package/template/src/subComponents/caption/DownloadTranscriptBtn.tsx +65 -0
  383. package/template/src/subComponents/caption/LanguageSelectorPopup.tsx +192 -0
  384. package/template/src/subComponents/caption/Transcript.tsx +452 -0
  385. package/template/src/subComponents/caption/TranscriptIcon.tsx +123 -0
  386. package/template/src/subComponents/caption/TranscriptText.tsx +98 -0
  387. package/template/src/subComponents/caption/index.ts +3 -0
  388. package/template/src/subComponents/caption/proto/ptoto.js +91 -0
  389. package/template/src/subComponents/caption/proto/test.proto +23 -0
  390. package/template/src/subComponents/caption/useCaption.tsx +123 -0
  391. package/template/src/subComponents/caption/useCaptionWidth.ts +27 -0
  392. package/template/src/subComponents/caption/useSTTAPI.tsx +179 -0
  393. package/template/src/subComponents/caption/useStreamMessageUtils.native.ts +211 -0
  394. package/template/src/subComponents/caption/useStreamMessageUtils.ts +235 -0
  395. package/template/src/subComponents/caption/useTranscriptDownload.native.ts +63 -0
  396. package/template/src/subComponents/caption/useTranscriptDownload.ts +52 -0
  397. package/template/src/subComponents/caption/utils.ts +126 -0
  398. package/template/src/subComponents/chat/ChatParticipants.tsx +60 -24
  399. package/template/src/subComponents/livestream/ApprovedLiveStreamControlsView.tsx +2 -2
  400. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +19 -20
  401. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +66 -35
  402. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +3 -2
  403. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +10 -6
  404. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +28 -19
  405. package/template/src/subComponents/recording/useIsRecordingBot.tsx +38 -0
  406. package/template/src/subComponents/recording/useRecording.tsx +251 -138
  407. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +0 -1
  408. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +39 -15
  409. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +275 -69
  410. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +193 -124
  411. package/template/src/subComponents/screenshare/useScreenshare.tsx +2 -0
  412. package/template/src/subComponents/waiting-rooms/WaitingRoomControls.tsx +85 -0
  413. package/template/src/subComponents/waiting-rooms/useWaitingRoomAPI.ts +75 -0
  414. package/template/src/theme/index.ts +13 -0
  415. package/template/src/utils/SdkEvents.ts +37 -14
  416. package/template/src/utils/SdkMethodEvents.ts +101 -0
  417. package/template/src/utils/axiomLogger.ts +117 -0
  418. package/template/src/utils/book.jpg +0 -0
  419. package/template/src/utils/common.tsx +118 -6
  420. package/template/src/utils/constants.ts +4 -0
  421. package/template/src/utils/getCustomRoute.ts +7 -0
  422. package/template/src/utils/index.tsx +34 -0
  423. package/template/src/utils/useActionSheet.tsx +50 -0
  424. package/template/src/utils/useActiveSpeaker.ts +38 -0
  425. package/template/src/utils/useAppState.ts +17 -0
  426. package/template/src/utils/useAsyncEffect.ts +138 -0
  427. package/template/src/utils/{useCreateMeeting.ts → useCreateRoom.ts} +27 -26
  428. package/template/src/utils/useEndCall.ts +65 -0
  429. package/template/src/utils/useFindActiveSpeaker.native.ts +4 -0
  430. package/template/src/utils/useFindActiveSpeaker.ts +335 -0
  431. package/template/src/utils/useGetMeetingPhrase.ts +10 -10
  432. package/template/src/utils/useIsAudioEnabled.ts +3 -3
  433. package/template/src/utils/useIsLocalUserSpeaking.native.ts +4 -0
  434. package/template/src/utils/useIsLocalUserSpeaking.ts +103 -0
  435. package/template/src/utils/useIsPSTN.ts +3 -3
  436. package/template/src/utils/useIsVideoEnabled.ts +3 -3
  437. package/template/src/utils/useJoinRoom.ts +199 -0
  438. package/template/src/utils/{useIsActiveSpeaker.ts → useLocalAudio.ts} +23 -12
  439. package/template/src/{components/OAuth.tsx → utils/useMenu.tsx} +16 -15
  440. package/template/src/utils/useModal.tsx +8 -0
  441. package/template/src/utils/useMutePSTN.ts +2 -2
  442. package/template/src/utils/useMuteToggleLocal.ts +121 -96
  443. package/template/src/utils/useRemoteEndCall.ts +4 -4
  444. package/template/src/utils/useRemoteEndScreenshare.ts +4 -4
  445. package/template/src/utils/useRemoteMute.ts +7 -7
  446. package/template/src/utils/useRemoteRequest.ts +7 -7
  447. package/template/src/utils/useSearchParams.tsx +28 -0
  448. package/template/src/utils/useString.ts +13 -3
  449. package/template/src/utils/useSwitchCamera.native.tsx +25 -0
  450. package/template/src/{subComponents/screenshare/ScreenshareButton.native.tsx → utils/useSwitchCamera.tsx} +12 -11
  451. package/template/src/utils/useToolbar.tsx +59 -0
  452. package/template/src/wasms/agora-virtual-background.wasm +0 -0
  453. package/template/static.d.ts +42 -0
  454. package/template/tsconfig_rsdk_index.json +3 -3
  455. package/template/tsconfig_wsdk_index.json +1 -1
  456. package/template/web/index.html +20 -0
  457. package/template/webpack.commons.js +21 -10
  458. package/template/webpack.rsdk.config.js +1 -2
  459. package/template/webpack.web.config.js +7 -3
  460. package/template/_buckconfig +0 -6
  461. package/template/_gitattributes +0 -1
  462. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +0 -10
  463. package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +0 -11
  464. package/template/android/app/_BUCK +0 -55
  465. package/template/android/app/build_defs.bzl +0 -19
  466. package/template/bridge/rtc/webNg/LocalView.tsx +0 -20
  467. package/template/ios/HelloWorld/AppDelegate.m +0 -74
  468. package/template/src/components/OAuth.electron.tsx +0 -41
  469. package/template/src/components/OAuth.native.tsx +0 -55
  470. package/template/src/components/OAuthConfig.ts +0 -77
  471. package/template/src/components/StoreToken.tsx +0 -39
  472. package/template/src/components/meeting-info/useMeetingInfo.tsx +0 -70
  473. package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
  474. package/template/src/utils/useButtonTemplate.tsx +0 -44
  475. package/template/src/utils/useJoinMeeting.ts +0 -132
@@ -10,9 +10,9 @@
10
10
  *********************************************
11
11
  */
12
12
  module.exports = {
13
+ arrowParens: 'avoid',
14
+ bracketSameLine: true,
13
15
  bracketSpacing: false,
14
- jsxBracketSameLine: true,
15
16
  singleQuote: true,
16
17
  trailingComma: 'all',
17
- endOfLine:"auto"
18
18
  };
@@ -3,4 +3,9 @@ module.exports = {
3
3
  extends: '@react-native-community',
4
4
  parser: '@typescript-eslint/parser',
5
5
  plugins: ['@typescript-eslint'],
6
+ "rules": {
7
+ "no-shadow": "off",
8
+ "@typescript-eslint/no-shadow": ["error"]
9
+ },
10
+
6
11
  };
@@ -22,24 +22,24 @@
22
22
  "url": "https://github.com/AgoraIO-Community/ReactNative-UIKit/issues"
23
23
  },
24
24
  "peerDependencies": {
25
- "react": "^16.9.0",
26
- "react-native": "^0.61.5",
27
- "react-native-agora": "^3.0.1-rc.4"
25
+ "react": "18.2.0",
26
+ "react-native": "0.72.4",
27
+ "react-native-agora": "4.2.6"
28
28
  },
29
29
  "devDependencies": {
30
- "@babel/core": "^7.6.2",
31
- "@babel/runtime": "^7.6.2",
30
+ "@babel/core": "^7.20.0",
31
+ "@babel/runtime": "^7.20.0",
32
32
  "@react-native-community/eslint-config": "^1.0.0",
33
33
  "@types/jest": "^24.0.24",
34
- "@types/react-native": "^0.62.0",
35
- "@types/react-test-renderer": "16.9.2",
36
- "@typescript-eslint/eslint-plugin": "^2.27.0",
37
- "@typescript-eslint/parser": "^2.27.0",
38
- "babel-jest": "^24.9.0",
39
- "eslint": "^6.5.1",
40
- "jest": "^24.9.0",
41
- "metro-react-native-babel-preset": "^0.58.0",
42
- "react-test-renderer": "16.11.0",
34
+ "@types/react-native": "0.67.6",
35
+ "@types/react-test-renderer": "18.0.0",
36
+ "@typescript-eslint/eslint-plugin": "6.4.0",
37
+ "@typescript-eslint/parser": "6.4.0",
38
+ "babel-jest": "^29.2.1",
39
+ "eslint": "^8.19.0",
40
+ "jest": "^29.2.1",
41
+ "metro-react-native-babel-preset": "0.76.8",
42
+ "react-test-renderer": "18.2.0",
43
43
  "prettier": "^2.0.4",
44
44
  "typescript": "^3.8.3"
45
45
  },
@@ -3,7 +3,7 @@ import {ScrollView, View} from 'react-native';
3
3
  import RtcConfigure from './RtcConfigure';
4
4
  import MaxVideoView from './Views/MaxVideoView';
5
5
  import MinVideoView from './Views/MinVideoView';
6
- import {RenderConsumer} from './Contexts/RenderContext';
6
+ import {ContentConsumer} from './Contexts/ContentContext';
7
7
  import {PropsProvider, PropsInterface} from './Contexts/PropsContext';
8
8
 
9
9
  import styles from './Style';
@@ -16,12 +16,12 @@ const AgoraUIKit: React.FC<PropsInterface> = (props) => {
16
16
  <PropsProvider value={props}>
17
17
  <View style={{backgroundColor: '#000', flex: 1}}>
18
18
  <RtcConfigure>
19
- <RenderConsumer>
20
- {({renderList, activeUids}) => {
19
+ <ContentConsumer>
20
+ {({defaultContent, activeUids}) => {
21
21
  const [maxUid, ...minUids] = activeUids;
22
22
  return (
23
23
  <>
24
- <MaxVideoView user={renderList[maxUid]} key={maxUid} />
24
+ <MaxVideoView user={defaultContent[maxUid]} key={maxUid} />
25
25
  <ScrollView
26
26
  showsHorizontalScrollIndicator={false}
27
27
  horizontal={true}
@@ -29,7 +29,7 @@ const AgoraUIKit: React.FC<PropsInterface> = (props) => {
29
29
  {minUids.map((minUid) => (
30
30
  <MinVideoView
31
31
  showOverlay
32
- user={renderList[minUid]}
32
+ user={defaultContent[minUid]}
33
33
  key={minUid}
34
34
  />
35
35
  ))}
@@ -37,7 +37,7 @@ const AgoraUIKit: React.FC<PropsInterface> = (props) => {
37
37
  </>
38
38
  );
39
39
  }}
40
- </RenderConsumer>
40
+ </ContentConsumer>
41
41
  <LocalControls />
42
42
  </RtcConfigure>
43
43
  </View>
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import {ContentStateInterface} from './RtcContext';
3
+
4
+ const ContentContext = React.createContext<ContentStateInterface>(
5
+ {} as ContentStateInterface,
6
+ );
7
+
8
+ export const ContentProvider = ContentContext.Provider;
9
+ export const ContentConsumer = ContentContext.Consumer;
10
+ export default ContentContext;
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ import {CallbacksInterface} from './PropsContext';
3
+
4
+ export type DispatchType = <
5
+ T extends keyof CallbacksInterface,
6
+ V extends Parameters<CallbacksInterface[T]>,
7
+ >(action: {
8
+ type: T;
9
+ value: V;
10
+ }) => void;
11
+
12
+ export interface DispatchContextInterface {
13
+ dispatch: DispatchType;
14
+ }
15
+
16
+ const DispatchContext = React.createContext<DispatchContextInterface>(
17
+ {} as DispatchContextInterface,
18
+ );
19
+
20
+ export const DispatchProvider = DispatchContext.Provider;
21
+ export const DispatchConsumer = DispatchContext.Consumer;
22
+ export default DispatchContext;
@@ -1,10 +1,10 @@
1
1
  import React, {useContext, createContext} from 'react';
2
- import RenderContext from './RenderContext';
3
- import {RenderInterface} from './PropsContext';
2
+ import ContentContext from './ContentContext';
3
+ import {ContentInterface} from './PropsContext';
4
4
  import {UidType} from './RtcContext';
5
5
 
6
- export const LocalContext = createContext<RenderInterface>(
7
- {} as RenderInterface,
6
+ export const LocalContext = createContext<ContentInterface>(
7
+ {} as ContentInterface,
8
8
  );
9
9
  export const LocalProvider = LocalContext.Provider;
10
10
  export const LocalConsumer = LocalContext.Consumer;
@@ -15,12 +15,12 @@ interface LocalUserContextInterface {
15
15
  }
16
16
 
17
17
  const LocalUserContext: React.FC<LocalUserContextInterface> = (props) => {
18
- const {renderList} = useContext(RenderContext);
18
+ const {defaultContent} = useContext(ContentContext);
19
19
  if (!props?.localUid) {
20
20
  console.error('Error: local user id is empty');
21
21
  return null;
22
22
  }
23
- let localUser: RenderInterface = renderList[props?.localUid];
23
+ let localUser: ContentInterface = defaultContent[props?.localUid];
24
24
  if (!localUser) {
25
25
  console.error("Error: we couldn't find the local user data");
26
26
  return null;
@@ -1,26 +1,44 @@
1
1
  import React from 'react';
2
2
  import {StyleProp, ViewStyle} from 'react-native';
3
- import {RtcEngineEvents} from 'react-native-agora/lib/typescript/src/common/RtcEvents';
3
+ import {IRtcEngineEventHandler} from 'react-native-agora';
4
4
  import {EncryptionMode} from 'react-native-agora';
5
5
  import {VideoProfile} from '../Utils/quality';
6
6
  import {UidType} from './RtcContext';
7
7
 
8
8
  /* User role for live streaming mode */
9
- export enum ClientRole {
10
- /* 1: A host can both send and receive streams. */
11
- Broadcaster = 1,
12
- /* 2: The default role. An audience can only receive streams. */
13
- Audience = 2,
9
+ export enum ClientRoleType {
10
+ /**
11
+ * 1: Host. A host can both send and receive streams.
12
+ */
13
+ ClientRoleBroadcaster = 1,
14
+ /**
15
+ * 2: (Default) Audience. An audience member can only receive streams.
16
+ */
17
+ ClientRoleAudience = 2,
14
18
  }
15
19
 
16
20
  /* Mode for RTC (Live or Broadcast) */
17
- export enum ChannelProfile {
18
- /** 0: (Default) The Communication profile.
19
- * Use this profile in one-on-one calls or group calls, where all users can talk freely. */
20
- Communication = 0,
21
- /** 1: The Live-Broadcast profile.
22
- * Users in a live-broadcast channel have a role as either host or audience. A host can both send and receive streams; an audience can only receive streams. */
23
- LiveBroadcasting = 1,
21
+ export enum ChannelProfileType {
22
+ /**
23
+ * 0: Communication. Use this profile when there are only two users in the channel.
24
+ */
25
+ ChannelProfileCommunication = 0,
26
+ /**
27
+ * 1: Live streaming. Live streaming. Use this profile when there are more than two users in the channel.
28
+ */
29
+ ChannelProfileLiveBroadcasting = 1,
30
+ /**
31
+ * 2: Gaming. This profile is deprecated.
32
+ */
33
+ ChannelProfileGame = 2,
34
+ /**
35
+ * Cloud gaming. The scenario is optimized for latency. Use this profile if the use case requires frequent interactions between users.
36
+ */
37
+ ChannelProfileCloudGaming = 3,
38
+ /**
39
+ * @ignore
40
+ */
41
+ ChannelProfileCommunication1v1 = 4,
24
42
  }
25
43
 
26
44
  // disabled is intentionally kept as the 1st item in the enum.
@@ -45,23 +63,37 @@ export enum PermissionState {
45
63
  export const toggleHelper = (state: ToggleState) =>
46
64
  state === ToggleState.enabled ? ToggleState.disabled : ToggleState.enabled;
47
65
 
48
- export interface DefaultRenderInterface {
66
+ export interface DefaultContentInterface {
67
+ //uikit and core
49
68
  uid: UidType;
50
69
  audio: ToggleState;
51
70
  video: ToggleState;
52
71
  streamType: 'high' | 'low';
53
72
  type: 'rtc';
54
73
  permissionStatus?: PermissionState;
74
+ audioForceDisabled?: boolean;
75
+ videoForceDisabled?: boolean;
55
76
  //applicable only to the screenshare
56
77
  parentUid?: UidType;
78
+ //uikit and core
79
+
80
+ //core only
81
+ name: string;
82
+ screenUid: number;
83
+ offline: boolean;
84
+ lastMessageTimeStamp: number;
85
+ isInWaitingRoom?: boolean;
86
+ //core only
57
87
  }
58
- export interface CustomRenderInterface<T> {
59
- type: T extends DefaultRenderInterface['type'] ? never : T;
88
+ export interface CustomContentInterface<T> {
89
+ type: T extends DefaultContentInterface['type'] ? never : T;
60
90
  }
61
- interface ExtenedRenderInterface extends CustomRenderInterface<string> {
91
+ interface ExtenedContentInterface extends CustomContentInterface<string> {
62
92
  [key: string]: any;
63
93
  }
64
- export type RenderInterface = DefaultRenderInterface | ExtenedRenderInterface;
94
+ export type ContentInterface =
95
+ | DefaultContentInterface
96
+ | ExtenedContentInterface;
65
97
 
66
98
  interface remoteBtnStylesInterface {
67
99
  muteRemoteAudio?: StyleProp<ViewStyle>;
@@ -104,14 +136,12 @@ export interface RtcPropsInterface {
104
136
  dual?: boolean | null;
105
137
  profile?: VideoProfile;
106
138
  initialDualStreamMode?: DualStreamMode;
107
- role?: ClientRole /* Set local user's role between audience and host. Use with mode set to livestreaming. (default: host) */;
139
+ role?: ClientRoleType /* Set local user's role between audience and host. Use with mode set to livestreaming. (default: host) */;
108
140
  callActive?: boolean;
109
141
  encryption?: {
110
142
  key: string;
111
- mode:
112
- | EncryptionMode.AES128XTS
113
- | EncryptionMode.AES256XTS
114
- | EncryptionMode.AES128ECB;
143
+ mode: EncryptionMode.Aes128Gcm2 | EncryptionMode.Aes256Gcm2;
144
+ salt: number[];
115
145
  };
116
146
  // commented for v1 release
117
147
  // lifecycle?: {
@@ -120,6 +150,14 @@ export interface RtcPropsInterface {
120
150
  // };
121
151
  geoFencing?: boolean;
122
152
  audioRoom?: boolean;
153
+ activeSpeaker?: boolean;
154
+ preventJoin?: boolean;
155
+
156
+ //core only
157
+ screenShareUid?: number;
158
+ screenShareToken?: string;
159
+ recordingBot?: false;
160
+ //core only
123
161
  }
124
162
 
125
163
  export interface CallbacksInterface {
@@ -127,24 +165,26 @@ export interface CallbacksInterface {
127
165
  FullScreen(): void; //?
128
166
  SwitchCamera(): void; //Not in reducer
129
167
  UpdateDualStreamMode(mode: DualStreamMode): void;
130
- UserJoined: RtcEngineEvents['UserJoined'];
131
- UserOffline: RtcEngineEvents['UserOffline'];
168
+ UserJoined: IRtcEngineEventHandler['onUserJoined'];
169
+ UserOffline: IRtcEngineEventHandler['onUserOffline'];
132
170
  SwapVideo(uid: UidType): void;
133
171
  DequeVideo(uid: UidType): void;
134
- UserMuteRemoteAudio(uid: UidType, muted: RenderInterface['audio']): void;
135
- UserMuteRemoteVideo(uid: UidType, muted: RenderInterface['video']): void;
136
- LocalMuteAudio(muted: ToggleState): void;
137
- LocalMuteVideo(muted: ToggleState): void;
172
+ UserMuteRemoteAudio(uid: UidType, muted: ContentInterface['audio']): void;
173
+ UserMuteRemoteVideo(uid: UidType, muted: ContentInterface['video']): void;
174
+ LocalMuteAudio(muted: ToggleState, forceDisabled?: boolean): void;
175
+ LocalMuteVideo(muted: ToggleState, forceDisabled?: boolean): void;
138
176
  LocalPermissionState(
139
- permissionState: RenderInterface['permissionStatus'],
177
+ permissionState: ContentInterface['permissionStatus'],
140
178
  ): void;
141
- RemoteAudioStateChanged: RtcEngineEvents['RemoteAudioStateChanged'];
142
- RemoteVideoStateChanged: RtcEngineEvents['RemoteVideoStateChanged'];
143
- ActiveSpeakerDetected: RtcEngineEvents['ActiveSpeaker'];
144
- JoinChannelSuccess: RtcEngineEvents['JoinChannelSuccess'];
145
- UpdateRenderList(uid: UidType, user: Partial<RenderInterface>): void;
179
+ RemoteAudioStateChanged: IRtcEngineEventHandler['onRemoteAudioStateChanged'];
180
+ RemoteVideoStateChanged: IRtcEngineEventHandler['onRemoteVideoStateChanged'];
181
+ JoinChannelSuccess: IRtcEngineEventHandler['onJoinChannelSuccess'];
182
+ UpdateRenderList(uid: UidType, user: Partial<ContentInterface>): void;
146
183
  AddCustomContent(uid: UidType, data: any): void;
184
+ RemoveCustomContent(uid: UidType): void;
147
185
  UserPin(Uid: UidType): void;
186
+ UserSecondaryPin(Uid: UidType): void;
187
+ ActiveSpeaker(Uid: UidType): void;
148
188
  }
149
189
 
150
190
  export type CustomCallbacksInterface = CallbacksInterface;
@@ -153,19 +193,20 @@ export interface PropsInterface {
153
193
  rtcProps: RtcPropsInterface;
154
194
  styleProps?: Partial<StylePropInterface>;
155
195
  callbacks?: Partial<CallbacksInterface>;
156
- mode?: ChannelProfile;
196
+ mode?: ChannelProfileType;
157
197
  }
158
198
 
159
- const initialValue: PropsInterface = {
199
+ const initialValue: Partial<PropsInterface> = {
160
200
  rtcProps: {
161
201
  appId: '',
162
202
  channel: '',
163
203
  geoFencing: true,
164
204
  audioRoom: false,
205
+ preventJoin: true,
165
206
  },
166
207
  };
167
208
 
168
- const PropsContext = React.createContext<PropsInterface>(initialValue);
209
+ const PropsContext = React.createContext<Partial<PropsInterface>>(initialValue);
169
210
 
170
211
  export const PropsProvider = PropsContext.Provider;
171
212
  export const PropsConsumer = PropsContext.Consumer;
@@ -1,19 +1,37 @@
1
1
  import React from 'react';
2
2
  import {CallbacksInterface} from './PropsContext';
3
- import RtcEngine from 'react-native-agora';
4
- import type {DualStreamMode, RenderInterface} from './PropsContext';
3
+ import {IRtcEngine} from 'react-native-agora';
4
+ import type {DualStreamMode, ContentInterface} from './PropsContext';
5
5
 
6
6
  export type UidType = number;
7
7
 
8
- export interface RenderObjects {
9
- [key: number]: RenderInterface;
8
+ export interface ContentObjects {
9
+ [key: number]: ContentInterface;
10
10
  }
11
11
 
12
- export interface RenderStateInterface {
13
- renderList: RenderObjects;
12
+ type JSXElement = () => JSX.Element;
13
+ export interface CustomContentInferface {
14
+ uid: UidType;
15
+ component: boolean | React.ComponentType | JSXElement;
16
+ props: any;
17
+ onStage?: boolean; //true by default
18
+ }
19
+
20
+ export interface CustomContentObjects {
21
+ [key: number]: CustomContentInferface;
22
+ }
23
+ export interface ContentStateInterface {
24
+ customContent?: CustomContentObjects;
25
+ setCustomContent: (
26
+ uid: CustomContentInferface['uid'],
27
+ component: CustomContentInferface['component'],
28
+ props?: CustomContentInferface['props'],
29
+ onStage?: CustomContentInferface['onStage'],
30
+ ) => void;
31
+ defaultContent: ContentObjects;
14
32
  activeUids: Array<UidType>;
15
- activeSpeaker?: UidType;
16
33
  pinnedUid?: UidType;
34
+ secondaryPinnedUid?: UidType;
17
35
  lastJoinedUid?: UidType;
18
36
  }
19
37
 
@@ -22,19 +40,10 @@ export interface ActionInterface<T extends keyof CallbacksInterface> {
22
40
  value: Parameters<CallbacksInterface[T]>;
23
41
  }
24
42
 
25
- export type DispatchType = <
26
- T extends keyof CallbacksInterface,
27
- V extends Parameters<CallbacksInterface[T]>,
28
- >(action: {
29
- type: T;
30
- value: V;
31
- }) => void;
32
-
33
43
  export type ActionType<T extends keyof CallbacksInterface> = ActionInterface<T>;
34
44
 
35
45
  export interface RtcContextInterface {
36
- RtcEngine: RtcEngine;
37
- dispatch: DispatchType;
46
+ RtcEngineUnsafe: IRtcEngine;
38
47
  setDualStreamMode: React.Dispatch<React.SetStateAction<DualStreamMode>>;
39
48
  }
40
49
 
@@ -26,6 +26,7 @@ interface BtnTemplateBasicInterface {
26
26
  disabled?: boolean;
27
27
  }
28
28
  interface BtnTemplateInterfaceWithName extends BtnTemplateBasicInterface {
29
+ //@ts-ignore
29
30
  name?: keyof IconsInterface;
30
31
  }
31
32
  interface BtnTemplateInterfaceWithIcon extends BtnTemplateBasicInterface {
@@ -9,9 +9,41 @@ export interface IconsInterface {
9
9
  'demote-outlined': string;
10
10
  'lower-hand': string;
11
11
  'raise-hand': string;
12
+ 'white-board': string;
13
+ ains: string;
14
+ 'vb-blur': string;
15
+ 'vb-color': string;
16
+ 'vb-image': string;
17
+ vb: string;
18
+ 'turn-off-stt': string;
19
+ 'live-caption-mode': string;
20
+ done: string;
21
+ warning: string;
22
+ 'noise-cancellation': string;
23
+ 'whiteboard-new': string;
24
+ chat_attachment_pdf: string;
25
+ chat_attachment_image: string;
26
+ chat_attachment_doc: string;
27
+ chat_attachment_unknown: string;
12
28
  }
13
29
 
14
30
  const icons: IconsInterface = {
31
+ 'whiteboard-new':
32
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAACXBIWXMAACE4AAAhOAFFljFgAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANWSURBVHgB7ZuBcdswDEWhXgdIN1C6QNNO4HSCbBB3gmYDuxPEncC+LuJs4GwgbxBvgAIVXcs2KQKU5MgS3h3PdzIBif8gUIQoAMMwjDQQMad2A8YxJModtQIPLFksMP5HTVUcNKEqkAAzjPMMY8RFj5Q5jA0a9Eoh0BuMCWX0iAX6AMNBm1d+w1igaHhAHQWOaTbD8LQe4hHGAg12ijoKGBNdR08W60AOJ/TDTvk3h+tmm2XZrcbgY+gPLJPYEkphhsIPUOIViMS5o581tSGthFcUPS+g5OwWc5GzgWGJw9ySQFtQ4ntQHFrkMKsUcZgjgVxCzmF4/JJ2dOkl+GdosfdG7Ql7UJ1LmNbnCt8zasu6Dhts4dmhKzDhoRCFSwo8FNqKuk4hepGTsMOHQqzcPXWdvEAPwA6XFHhSKqnr2EuBsL7OHCIpeq5VoGfUsVH4zsXj7aNAqK8UMncK/+vOBaIuN24grb+oQ12dmVkqfHvzWp2BWCA6PKG2QH9u4MeFn9iwaodp0ZMr/Bc+B3UGUYGwjBZNTphBIugJ/wji6JGOV22A+oTJFJgQTaij0J4j5KiRATZDFU2oYw5KQo4aGWC5LmsCR6AokSt8JtWZQ86qfVLei714ju3c8VeI80SNk3gO7TGHSyBRFMskvZ96OZoW1YjAcuaRTM0FRp52UUbyW4qQw/YM6k8+RdnyYImVaMLDLCm5ldk2+bkr5LQ9g/gFaNZQfNutFcLk0JCQ8/YMZBfBEbHA5uxv5xxaInSi9gx0FzPHBkAHqM+lNtBfUErZgllAB6jHqzZIvzBNNB3Nki1fRz8FcufiaOIXAb46eOGEmUCHSMabnRr4HNE7peg7/Ca4CNlHyY5Ot4MLIBlvLwR6LyTjHdIWvE4wgSKYQBFMoAgmUAQTKIIJFMEEijBagaQrKJFAOMzPGkVjOhVoG+g3hYHAkeOi5yHQ5bXOOFRs52re4zVFEl1rFmifXBUhVNo9ejt7ulidQLnLdczcV/dT+/ZJs0ATGCcFifO5esCXpHm7/kXqMT2Dv0D8fnrwTCC34foexiXSP3F8m8290zx15Ez+FcKz2lDg6YxTyjc35jOkn0NNqX2hJt7adkFSauZbKPcS/En5wMUwDMMwDMMw4C9ycj0K0Sb6NAAAAABJRU5ErkJggg==',
33
+ 'noise-cancellation':
34
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAACXBIWXMAACE4AAAhOAFFljFgAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANxSURBVHgB7ZvxddowEMaPvv5fRlA2yAjuBMkGYYPSCeJMAJ0AMkGyAWzQdAKzAXSCr6dafjjGtiRbxgLu9949g5Fk+8vJOukUIkEQBEEQBEEQ/JlQBACY8uGRTZlTH9omk8mObhkWRrFt0MxKl/Fsc8G2N6JfLvwA92wZ7Ogy945tqlKbKV0qlQdxIbN5kmlzXaqjveiJxoRvYGZu5sGz3hr+bFrae0YPcQcDRy/YeNRR6M60oc15S539KALxRZPKjSSO9R7RnVlLu1r4t1LZDGN2MZyOPk5exOVSdCe1tD1F7jGaBQXgC3libuKZPyaVn7RHaVdXNBIcNx348IutOJ6PQpjSX6iJDC3xy5AeNAROHoS872dsKZstAFNs/8tj7GE2AD5dzDcyPdAV4CQQ9+01H+7YXtl2luJamBddnuu90oXj7EF64sg244/f2X42FCuESc0LMwqQT2vQpct7j2JGqCV/3FZ+2sYmTIm5Oc7IE2+BSrxYvo9OKSQpPCcxI7Gic4BjsJh51DnLMI88Ym8LSeYu7fTxIE0RjKUUJ4eW8zuKEZwxUEQ+P6tOZJfwWEzr60FRUzOg6O9zn4HkqgUqUQwgKXnylW4A9pgtdUxQ3IoHdUYEsiACWRCBLAQRCMeFtAyOOawhQD4pLaLnZ4oBnC7Ct2Y1cUwVdeHBci9ZpXxCPQnhQdOa76ql/Dt150/TD0YMVTn9jXoSQqCPmnNJU2ETxW7Jn7VlM4OqOfeXxgafUy0FK0udIVLPb9VKFAs4zZFZd1cg4OYF1GdrnbO9g4P61G/qUK+64eDkIeGwuIX6F3+QjEqQDVTGW/SiWdlr9LvmzmXmbES4N6bZsb171NXeoio/3UW1AavBE4Kkfztcd0WxYbpL3RKn09Jmx2v+QD2KYgTNq4XBM6y6zYZrpRQzfIO/G248mCe1eI5z8mA00B7jrPq4P/KYa9EkDmLtWlXwedJY9yBP8Fg4h31nyTi7yPoAe7S8Nx71ZASdlupOzbmZKdOW38ow4gpCL+A/pfBFv+8UXTrolwurQ3tUStcE7NMKV2FWuAavacIIpd8tGw9RdFk9tF/2vxd0AfnLuK4L6nOX+fINDU73XGsSigDJalgQgSyIQBZEIAsikAURyEIsAl3FrvxBQb53sGBJwikmqpboWRAEQRCC8A+7wtIN3wzWKgAAAABJRU5ErkJggg==',
35
+ warning:
36
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAADNUlEQVR4Ae2c0W0TQRCG/zXxe0pwOoAOLh0kEkQ8kgpIKoioAKggvAEJUkwFuAPoADrABcQssxs7SqSsvXu3Mztx5pMsnew7Rxn/s9/tns+AYRiGYRiGYRiGYRjGtuCvMKHHLhTjoJBYtGtc0WZ38wSmGOPYHWIOZYygkWu8xap4AYcDeu4EClGXwNC2VKzfD7w0xw5eUAr/QBH6ErjA+8Qroa3PoQxVBfQXeEPj3cGaXTp/eae1FaCmhWPrLvCDCjhZu6OjFn4WW1mFUPQkMIhjU/ECPo6RaoSiIoFrxJFCjVB0JPDmnK8ENUJpXsAoDuA5ylEhlKYtnC2OFAqE0jaBueJIoUAozRLYQxxpdrDXSijtElgujnXv1UwoTQo4QBwpOv917QyGDfEWHiyOFI2EIp/AoeJI0UgoogmsKo4UwkKRTWC5OGb0EU+LjhAWilgBe4hj372ix0schu2C40SFItLCxeIgIVDh9u69xwW1vss/XkooMglc4IxFHCkEhcJewJg+H9tXmrP4t5nhT2Bo3VYICIW1gMtrHBO0g10obAWM7TOisa81I5xzfruBL4HS4kgTVq/ZPkiWAjYUR4oTGk5qLl7cwpPAluJI4ZIX7AdRvYAKxJGiW86GqlK1gGrEkYJSWFsodROoRxwpqgulWgEViiNFVaHUS2BNcXjs3p2GxW1XMdkVhVJlNSYOzq7ytCmsqHh8XG7XX8X2OHZH+ISBDC4g2zUOfubL1etBS17DW1i/OFJUEcqgBIpc4+DG08LrEX6hJ8MSyD/jKL8mUspAofQuIPuMIyRjdU2EtsFH57/0X73u1cLs4vD4Tm11bx3PX8a0d+Cht1D6JZBbHCP8hSy9hVKcQCFxzOkD2l8N7nHm4PAT/IRLqbOSA8oL+I2KJ3XaEm7xcnHy30GGWRh3Sw4oKiDLjEMbC5y61/iQu3t2AR/xjKOUIqHkS+TxzjhKKRJKVgIFB3FNZAklL4HbPu49TFYKNyZwefOz9HmZCiiBG+uTm0B1d4qz4/O+pLmxgNFGHu/wtAj/82nOjvmnMZ/JwGOSyT/dPwJRhTGmGn+fwTAMwzAMwzAMwzCMLeA/aQAlpfLwqQYAAAAASUVORK5CYII=',
37
+ vb: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEfSURBVHgB7VNbEcIwELwwCCgOkIADggMcgAQcVAI4KBJAARLAQeugdXBc6KVzpE2a5Ls7szNtsrebywNgQSoQsSWe+XtLrIlvYsFjJ+xhNQXPD5q5gJD5kfgKmZsFxISMzD26cqq7LHNe7YVYmQ6Mzo5Lc9tdKGDK3IZK1CIkzpzFsmVrUOE0Xjx/k+cyF2DNS1HkQ+vU/A4dIroo2UDzfxsKkOazAcL8LMbunoDKNY/ZosGcCwth8Lf/YmuyHpo1vYg5jf0V1W4NJj40e+c1JAAnHpqaKTCrOhL3xB1xSzRjHbEhfohPpdSD9dpo6P8OER2UgdvjojZ6SGi1wjxcXS/lCUDIQ0fbs5EDK58Q8jC6pmuP8AD9oaaigQWp+AKsAoDF7uWeIAAAAABJRU5ErkJggg==',
38
+ 'vb-image':
39
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAB20lEQVRIie2UPWsUURSGn2siwcRsdgU/EkjnT5BgsZVgxCaNCiqIIi4WRrD1F6RQxMKAgTRWahkIikktRtzSD1IpCIIEsfAjCQQei5zRyZDdmVjnheHcc+5733fuzLkXdrFTqJ/UEzE+pLbVp+reqF1Rv6rjkTfUl+ozdV8Vg4mIh9W36kK2UG2qi+qZnHhbfaXWona5iskR9V1evANvqiiurlcRf18UV/vVlno3Yr/aow7kxdULZQYfthEfVpfdxK+Iy+pwzF+qJB7k/DcfjPhE/aE2I29G/jjyO5m42igzyMSvqedjvKJOF3jT6kr2+SLW1Td53p6iQUppVW0BD4CPUV4DagVqDViNNb/VOrAAWLaDlrqWtWvU7qsb6g31aMQN9V7MD6mv46mXGfwVjz4/qA6o827FfNR74qAtqUNdxUM0L95WJ3NzY9ExY4U1FzNx9VwVk/3qLePKqAr1bPGgpQ7ElFIyOuo0cAo4BowAfcA68AVoAy+A59EcJ4GRlNKjMoM+4DZwEzgAfAeWgM8xbgCjwPEYf2Oz66ZSSt2vijCYiR85p06ovR14vTE/F/yHRU6nHfwEFoGrpW/zD7PAeEppsIpB98PSBSmlLZrbbh24/r8Gu9gx/gBohhCCgI16xQAAAABJRU5ErkJggg==',
40
+ 'vb-color':
41
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAvVBMVEUAAAAAAAAAAAAAAABAQEAgICAcHBwaGhogICAeHh4mGiYhISEfHx8eGB4aGh8eGR4cHCAeHiIdHSEbGx8fGx8eGiIeHiEdHSAdGiAdGh8cGh8cGh8cHB4bGyAcHCAdGx8cHB4eGx4dGx0dGx8bGx8cGh8bGh8bGyAdHB8dGx4cGx8cHB8cHB8cHB8cHB4bGx4bGx8cGiAbGx8cGyAcGh8cGh8cGx8cGyAcGyAcGyAcGx8dGx8cGx8cGx////9owITRAAAAPnRSTlMAAQIDBAgJChARFBcZKzIzNzw9QkJERUdhYmNkZWhvcnd5enuCioyer7K0tba3ubq8wcXJy8zOz9DR09bY2WCHnYUAAAABYktHRD5JZADjAAAAuklEQVQoz52R2RKCMAxFiyLu+4KCiiuKAm6oqOT/f0sMbaEwvnAfMpNzm9xpS0heSb3N0XtfduOayDt7oHotSgk+/UAsq8H5DATZFcq7QdhNFI0WgG3Ei/avUUiZFoCgicYI5zVFpyXUGg0TMjqg4fLdwLLuaDz4bp7lo/GMd7MsB41TNmP1J9yro6Gm+bUVXVB2k9S35lX2VIOA0bMkPrrBz7dFo2CwGT39gX2aM8x8rayajn9bSiS/vu5rPfA8hChsAAAAAElFTkSuQmCC',
42
+ 'vb-blur':
43
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAABWUlEQVRIieWUP0oDYRDF36gRxMZOUQRbIZBIPICYxsZKm1SxtMoBvIBN0qRJrpDaY6iQwt5CCGiUFGLjv5+Fm2SyZDdfFATJg4VvmDdvZmeGkWYCwB6w7uxd4CAkdiEwx6KkeWd3JD2Hl/jXAOpA3dlVoOHsBlBN4nvMBea06EuyZwFAFshF7xpQc74SUI5x/QwGfCAHZPs+v6YZDVdxOZa/JddzM7sBzpzf8zOadj6AARWgDVwCpakEAhKcMIpPYD8kdrCmwA5QiN5NoOl4R7E4k3TsYgd8oADk+z4/gzcNZ/ASE3waU9yje3v+u6SPsb+TBGAb6LkW3QGrIbHB0wY29N2qV0ktM+v9OEH/rphZBShKOpW0EqN1JdXM7Nrz41qp5zqq+kLSUgKlCGylaaQCOGQy8mkak67praS0XnckPUxb+AiAzejWtIEucA9cAefA2q/E/wW+AK4bGrj694GPAAAAAElFTkSuQmCC',
44
+ ains: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYAgMAAACdGdVrAAAACVBMVEUAAAD///////9zeKVjAAAAA3RSTlMAZr+SD6biAAAAAWJLR0QB/wIt3gAAADVJREFUCNdjYEADjA5giqkBk2J0agRJMjU1NaBTjE5NTUBJIAfEhVJQQawaYIZhtQjmCCQAAMpYF99YsyCnAAAAAElFTkSuQmCC',
45
+ 'white-board':
46
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAABeElEQVRIie3Uz4tNcRjH8c/XlRgjkiKzUNyr/EjK1n/g/5C/wI8F+ROklNjMjZKysrDT2GuahcjCxqCIJMKUppfFPeo6fWfuGZrdfDbn9Dzf8/48z3POeZINTVBpB7Avybkkp5IsJ3me5GYp5c1/u+EQPuMXnuEplvAVJ1d4poddXQ0OYojjY7EZvMewcn6AV1jG5X/t6gA+4E4ld8vfurQW8F5cw098xNGxXK+5bsHDMYMvXcC7G/D35l0MsX8sP8BLnK6YPJgEP4x3DXgW/VZ+gLcN7FvL5CqmJhncbcZxpJIbh2ubrKRNlVhJMt2GJ5lLMtM6O53kwqpVt0B9vMYL7Fil8j+amziWisl27FkXeMuoExw71xN+Ap9wD1u7wvtdx4JtuGi0Kq50Nbi+1pkbLcZHtVztM+1VYk+SnCml/GiBp3A+ybEkC107uDGpcpzFvNGPxmhVVLvbXInNJlls7peS3G5X3mgxyeMk90sp852q31BNvwGhl1TXx/9xfQAAAABJRU5ErkJggg==',
15
47
  profile:
16
48
  'data:image/png;base64,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',
17
49
  'no-mic':
@@ -32,6 +64,19 @@ const icons: IconsInterface = {
32
64
  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADvSURBVHgB5ZRREcIwDIZbB5MQCZOABBxQCUMBSJgEHCBhczAJlTAJITmyo1dW2vTKC/x3ubVZky9JbzPmr4SInmySdcemCR7I7nFQmAhFAcxrAE7ilyBhJ75pBxCu+VxfC3FbpR8Ai2zzI5OEq4wAxAcZgJctmBJxuzFE/GsTQAqy+ZoAJPAggblxVQMAX/LRuHxrwFsnQWIsBtChkcwlACj30icgkEveR9VecV8pCJR0cMMyMeQYQfIAJYR1khj1z08NUUsJGUyNlJCLqVEhZNqDWAXE0QMSr2dr7cyF0Jrv40z70XxD+Px2nPkZPQCoHCglmaLpAgAAAABJRU5ErkJggg==',
33
65
  'raise-hand':
34
66
  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADxSURBVHgB5ZTtEYIwDIYD5391gzqBjIAbOIojsIFuoBs4AmyAG+AIblATDSdW+pFSf3g+d+81V0jeNrQA/BVa644EKcGCNapFFfqFQi1IvvxZgEfJ43wwR3HN8cqVnI9N8uoKRx6tXLGc2HbQUjKaLGEiuWVe8ejtcaxBMpIYYCvPqP1XDOjI4rBF7SRJPeUgri2x6oOxWpnNAMKhe/C43RliPpzaosb3QqzBFbVhgyNI0X6o7xdzEgQ7uIGdBp7/p7Ug52MHJ8fqO5ZJeKv0+/EMRYEETKgExSuIIdAk/AZbTOjE0DdpB0U71EHclp/kDilNkhWhg0nUAAAAAElFTkSuQmCC',
67
+ 'turn-off-stt':
68
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAECSURBVHgBzVQLEcIwDE25CZgDhoNJQMJQADiYA4YCcDAsoIA6GChYHQAKSnJLj1LaXvncwbt710/SlyzpCvAP0FrnxBTHFbIPcMs+JfLMLF2NzI6KQ4OskVdPPMVjhTTZkeDRK2g57YUQCt7ECL6MJEFuQhGxF6ZJqRlS3TqeS2vf1K+HoZ5PUbQvE86Qulrzemo6bN2MPFmQ7TXbWxaskBveq3wHooLss0B2+o4DiYecHwSdS906vjt3zyCDMNbW/AKJiAkW9oKbIPHSSxj+ppcF5549ylRGzoQFMZMJhEEPhUYuY4KmTtRJBXGMkSefQdgLFGrA/6kuKPjsk0fkd7gBEy7vamLyRFEAAAAASUVORK5CYII=',
69
+ 'live-caption-mode':
70
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADUSURBVHgB5VPtDYIwEL0S/ssIHYERGEE3qBPoBuIGMgFsAk6iI7hBfadHUpsirZFfvOSlxx333RKtDmoUrLUax4nS8QDPSik+KXMMBqwoHUb4Qu4Z78i0pwRIZ8X4ndGfkVM4q8GhHdWFZwT90amGu+l836kKW0c+gCWCVfS5tJa+AQ412ItsA/YKvAX0PfvOVfgz8ikDso4tbcEdve9b4egNZqhiA/LV0SI38BsQiJfReP/EVRjanryEmmaw6Ay5gtKZUSw0eA0F7MS4oTQM4rtWPAFxAE4MEjNhpQAAAABJRU5ErkJggg==',
71
+ done: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAABDSURBVHgB1c3BDQAgCAPAjuIIbKQjuJmjOIKjICS+TBPCkyZ99QhAvahqs64M3lZhoxB8KH7Ax/7hgeC9oxlidoQ6ue+PS8aRUCPDAAAAAElFTkSuQmCC',
72
+ chat_attachment_pdf:
73
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFfSURBVHgB7ZU9S8NQGIVPShBsHRSKCpKY6qKLf0A7CCri4ioOOvozjH9A7Ci4uDjrqAgOFetSByenRImK3xZBB4fEN7lYzYfJzbVLS8+Qm/vm3PPkfpAAzS4pWDCvb004jpY00DQMSBnok8XiWpwvE6pwhNetNvSjcnkVqQAplQT5NyAJ0hBAHEQYIMtyJCTkg6AUVeXyNWyJ2gBh+T4VztKsSY2GFHqZW8Db+HS9X1AGfJnBU6R5V3UYmJkHnu+B6im7vzgHzirA4grw8Q7sbHrWjjsLcYo+ptkc8EThg0PA4wMLHxljwbku4GAPvPp7D0YpsFphIFfuxLMU3knwfC94FT0DN3R/ly1Jvg+YmAKuDOqf0EOH1YUAEi5pvOYBvt/cbbfWfzzHh74hn/0K4hT+4Vg3r9R0Q0w1OkU9vwtRe1CCoGzY28GaFGU0LWuD2Mvgn0mN4ksFRdHRcvoCpYdrkbRsJT8AAAAASUVORK5CYII=',
74
+ chat_attachment_doc:
75
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAE4SURBVHgB7ZWxS8NAFMZ/KRHcrE6CJKR7B8eAFHRzdNXFUQc3cRMaoe4WHXT0P3B0cyhCdzeHRoiKi9gOglPihbPFJjG5nHVQ/CB5uceX93v3DhL47TKSCf/+0SeKnKIX/V4Po4K30mgc5PkqqYxC8ZE1xLvqdJqUApRUEeTbgCLIRAB5EG2AaZqZkJQPTVm2reSb2Ij+Adoa+1TMNSNfBIcS2nUHbNRfR+uatTBWM7kDJ76tL8LhKthVeZ2swbYrDXGM1zPTcn37PEWeMke05MBZF45FoS1XPltVCa7Pw84FDN5Q0pdnkCwQdzzsehi1Add30BIj2r+U3e8tw80TnHZlbH2MT0U/fsjpH07w8CKCYn8p9QVg9nMia0RtNBUSnidzRpbRD4Ijwd5EfSd9Ub5dsyyPP6d3/d5cbIF9MEYAAAAASUVORK5CYII=',
76
+ chat_attachment_image:
77
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFoSURBVHgB3ZSxSsNQFIb/pEFqLCrtIBQSdPUNHDq4+AaOpYtPYJcOQuIDKHZ0rE/gGzh0E5yk0CmhJkoVWksgaDBNTFssaXKT3MSC2B8Scs8953y5/00u8N/FBAOq/qLCdXeTClVFAcNCPqxUzuPy2FCEovk81YF8125LSAVIqSTIrwFJkKUA4iCZARzHESGhPGSUIIpUeUuz6M8AkRa1BjswxjnQaDM3Rq30SpyLXAFt86RcKosc21gY1/NV1NerNKXxANvS0Xs4gHK/j6F26ZthQDjGiIrcA8vsoN89wZelTcc/gKJwiovPmxnGMeGyG8gEeO4ch6zxQ3K2An7UgMsU8LF15kXz6QDB5n4I45oQ+cfpChiY4N8bQPmKmJ/pPxjo13jqd+fjCTBKJMBocivyZcRCjCF6b7P9KayVFmr9IlnU9C5JOrpFWjlwWsEY8VtTNc0zlK15j9ugk/fmTnNPEGSsnL4BS3qBidiHD9wAAAAASUVORK5CYII=',
78
+ chat_attachment_unknown:
79
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADXSURBVHgB7ZU9DoIwGIZfCBMuuhgSU4SDMHgSjyLeQI7g5mTiCRy4BzVBXWWREawLEWj6J4uGZyF8ffmetDQt8OtY3QK93inqOpB9SLMMlo14FUVbUc7uVRSaN9EK8TlNN9ASaCKTfC2QSQYRiCTGAsdxuJJeDoYQ31fKDbZEo8CY1lFxOJ4oKwXQYEkIPG/evIdk0erZmYFe8zfPshSOjz9ZV1BfoMnEdYXj/Qsnvz3YYwozCraLZp8F3hIlMKRCte/WLF6Q5vmOuddQn0nB2ichITH+jhcl6jxZhl+rzAAAAABJRU5ErkJggg==',
35
80
  };
36
81
 
37
82
  export default icons;
@@ -3,22 +3,24 @@ import PropsContext from '../../Contexts/PropsContext';
3
3
  import RtcContext from '../../Contexts/RtcContext';
4
4
  import BtnTemplate from '../BtnTemplate';
5
5
  import styles from '../../Style';
6
+ import DispatchContext from '../../Contexts/DispatchContext';
6
7
 
7
- interface EndCallProps{
8
- btnText?: string
8
+ interface EndCallProps {
9
+ btnText?: string;
9
10
  }
10
11
 
11
12
  function EndCall(props?: EndCallProps) {
12
13
  const {styleProps} = useContext(PropsContext);
13
14
  const {localBtnStyles} = styleProps || {};
14
15
  const {endCall} = localBtnStyles || {};
15
- const {dispatch} = useContext(RtcContext);
16
+ const {dispatch} = useContext(DispatchContext);
16
17
 
17
18
  return (
18
19
  <BtnTemplate
20
+ //@ts-ignore
19
21
  name={'callEnd'}
20
22
  btnText={props?.btnText || 'Hang Up'}
21
- color='#FD0845'
23
+ color="#FD0845"
22
24
  style={{...styles.endCall, ...(endCall as object)}}
23
25
  onPress={() =>
24
26
  dispatch({
@@ -3,14 +3,16 @@ import PropsContext from '../../Contexts/PropsContext';
3
3
  import RtcContext from '../../Contexts/RtcContext';
4
4
  import BtnTemplate from '../BtnTemplate';
5
5
  import styles from '../../Style';
6
+ import DispatchContext from '../../Contexts/DispatchContext';
6
7
 
7
8
  function FullScreen() {
8
9
  const {styleProps} = useContext(PropsContext);
9
10
  const {localBtnStyles} = styleProps || {};
10
11
  const {fullScreen} = localBtnStyles || {};
11
- const {dispatch} = useContext(RtcContext);
12
+ const {dispatch} = useContext(DispatchContext);
12
13
  return (
13
14
  <BtnTemplate
15
+ //@ts-ignore
14
16
  name={'fullscreen'}
15
17
  style={{...styles.localBtn, ...(fullScreen as object)}}
16
18
  onPress={() => {
@@ -4,6 +4,7 @@ import RtcContext from '../../Contexts/RtcContext';
4
4
  import BtnTemplate from '../BtnTemplate';
5
5
  import styles from '../../Style';
6
6
  import {LocalContext} from '../../Contexts/LocalUserContext';
7
+ import DispatchContext from '../../Contexts/DispatchContext';
7
8
 
8
9
  interface LocalAudioMuteProps {
9
10
  btnText?: string;
@@ -15,11 +16,13 @@ function LocalAudioMute(props: LocalAudioMuteProps) {
15
16
  const {localBtnStyles, remoteBtnStyles} = styleProps || {};
16
17
  const {muteLocalAudio} = localBtnStyles || {};
17
18
  const {muteRemoteAudio} = remoteBtnStyles || {};
18
- const {RtcEngine, dispatch} = useContext(RtcContext);
19
+ const {RtcEngineUnsafe} = useContext(RtcContext);
20
+ const {dispatch} = useContext(DispatchContext);
19
21
  const local = useContext(LocalContext);
20
22
 
21
23
  return (
22
24
  <BtnTemplate
25
+ //@ts-ignore
23
26
  name={local.audio === ToggleState.enabled ? 'mic' : 'micOff'}
24
27
  btnText={btnText}
25
28
  style={{
@@ -46,7 +49,7 @@ function LocalAudioMute(props: LocalAudioMuteProps) {
46
49
  });
47
50
 
48
51
  try {
49
- await RtcEngine.muteLocalAudioStream(
52
+ await RtcEngineUnsafe.muteLocalAudioStream(
50
53
  localState === ToggleState.enabled,
51
54
  );
52
55
  // Enable UI