agora-appbuilder-core 4.0.0-api.5 → 4.0.0-api.6

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 (406) hide show
  1. package/package.json +2 -2
  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 +26471 -22749
  8. package/template/_prettierrc.js +2 -2
  9. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +30 -10
  10. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +19 -0
  11. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +1 -0
  12. package/template/agora-rn-uikit/src/Controls/Icons.ts +45 -0
  13. package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -4
  14. package/template/agora-rn-uikit/src/Controls/Local/FullScreen.tsx +3 -1
  15. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +1 -0
  16. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +1 -0
  17. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +1 -0
  18. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +1 -0
  19. package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +3 -1
  20. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +1 -0
  21. package/template/agora-rn-uikit/src/Reducer/ActiveSpeaker.ts +30 -0
  22. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +3 -1
  23. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +3 -1
  24. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +1 -1
  25. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +3 -3
  26. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +5 -4
  27. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +1 -1
  28. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +8 -5
  29. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +1 -1
  30. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +1 -1
  31. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +1 -1
  32. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +18 -1
  33. package/template/agora-rn-uikit/src/Reducer/UserSecondaryPin.ts +23 -0
  34. package/template/agora-rn-uikit/src/Reducer/index.ts +2 -0
  35. package/template/agora-rn-uikit/src/Rtc/Create.tsx +47 -21
  36. package/template/agora-rn-uikit/src/Rtc/Join.tsx +37 -15
  37. package/template/agora-rn-uikit/src/RtcConfigure.tsx +122 -12
  38. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +32 -4
  39. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +21 -2
  40. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +2 -0
  41. package/template/android/app/build.gradle +59 -156
  42. package/template/android/app/src/debug/AndroidManifest.xml +6 -1
  43. package/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java +7 -4
  44. package/template/android/app/src/main/AndroidManifest.xml +6 -19
  45. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  46. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +17 -0
  47. package/template/android/app/src/main/java/com/helloworld/MainApplication.java +19 -36
  48. package/template/android/app/src/release/java/com/helloworld/ReactNativeFlipper.java +20 -0
  49. package/template/android/build.gradle +19 -33
  50. package/template/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  51. package/template/android/gradle/wrapper/gradle-wrapper.properties +3 -2
  52. package/template/android/gradle.properties +18 -4
  53. package/template/android/gradlew +165 -104
  54. package/template/android/gradlew.bat +12 -23
  55. package/template/android/settings.gradle +1 -0
  56. package/template/bridge/rtc/webNg/RtcEngine.ts +131 -16
  57. package/template/bridge/rtc/webNg/index.ts +72 -1
  58. package/template/bridge/rtm/web/index.ts +5 -3
  59. package/template/configTransform.js +16 -1
  60. package/template/customization-api/action-library.ts +0 -8
  61. package/template/customization-api/app-state.ts +11 -2
  62. package/template/customization-api/customEvents.ts +6 -1
  63. package/template/customization-api/index.ts +4 -0
  64. package/template/customization-api/sub-components.ts +6 -3
  65. package/template/customization-api/temp.ts +50 -0
  66. package/template/customization-api/typeDefinition.ts +26 -14
  67. package/template/customization-api/types.ts +26 -0
  68. package/template/customization-api/utils.ts +2 -0
  69. package/template/customization-implementation/index.ts +0 -1
  70. package/template/defaultConfig.js +72 -0
  71. package/template/global.d.ts +13 -1
  72. package/template/index.js +0 -4
  73. package/template/index.web.js +0 -5
  74. package/template/index.wsdk.tsx +1 -19
  75. package/template/ios/.xcode.env +11 -0
  76. package/template/ios/HelloWorld/AppDelegate.h +2 -4
  77. package/template/ios/HelloWorld/AppDelegate.mm +42 -0
  78. package/template/ios/HelloWorld/Info.plist +1 -1
  79. package/template/ios/HelloWorld/main.m +2 -1
  80. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +529 -17
  81. package/template/ios/HelloWorld.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  82. package/template/ios/HelloWorld.xcworkspace/contents.xcworkspacedata +10 -0
  83. package/template/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  84. package/template/ios/HelloWorldTests/HelloWorldTests.m +14 -13
  85. package/template/ios/HelloWorldTests/Info.plist +2 -2
  86. package/template/ios/Podfile +53 -20
  87. package/template/ios/Podfile.lock +873 -0
  88. package/template/ios/ScreenSharing/Info.plist +15 -0
  89. package/template/ios/ScreenSharing/SampleHandler.h +9 -0
  90. package/template/ios/ScreenSharing/SampleHandler.m +70 -0
  91. package/template/jest.config.js +4 -0
  92. package/template/metro.config.js +7 -32
  93. package/template/package.json +52 -39
  94. package/template/react-native-toast-message/index.d.ts +3 -1
  95. package/template/react-native-toast-message/index.js +1 -0
  96. package/template/react-native-toast-message/src/components/base/index.js +20 -32
  97. package/template/react-native-toast-message/src/components/base/styles.js +18 -21
  98. package/template/react-native-toast-message/src/components/checkbox.js +24 -19
  99. package/template/react-native-toast-message/src/index.js +3 -1
  100. package/template/react-native-toast-message/src/index.sdk.tsx +4 -1
  101. package/template/src/App.tsx +13 -85
  102. package/template/src/AppRoutes.tsx +77 -0
  103. package/template/src/AppWrapper.tsx +38 -33
  104. package/template/src/SDKAppWrapper.tsx +79 -43
  105. package/template/src/app-state/useNoiseSupression.native.tsx +67 -0
  106. package/template/src/app-state/useNoiseSupression.tsx +107 -0
  107. package/template/src/app-state/useVideoQuality.tsx +39 -0
  108. package/template/src/assets/font-styles.css +171 -3
  109. package/template/src/assets/fonts/icomoon.ttf +0 -0
  110. package/template/src/assets/selection.json +1 -1
  111. package/template/src/atoms/ActionMenu.tsx +50 -11
  112. package/template/src/atoms/Avatar.tsx +51 -0
  113. package/template/src/atoms/Card.tsx +21 -8
  114. package/template/src/atoms/Carousel.native.tsx +105 -0
  115. package/template/src/atoms/Carousel.tsx +103 -0
  116. package/template/src/atoms/Checkbox.tsx +98 -0
  117. package/template/src/atoms/CircularProgress.tsx +0 -1
  118. package/template/src/atoms/ClipboardIconButton.tsx +91 -0
  119. package/template/src/atoms/CustomIcon.tsx +45 -0
  120. package/template/src/atoms/DropDownMulti.tsx +349 -0
  121. package/template/src/atoms/Dropdown.tsx +3 -3
  122. package/template/src/atoms/IconButton.tsx +52 -9
  123. package/template/src/atoms/ImageIcon.tsx +6 -3
  124. package/template/src/atoms/InlineNotification.tsx +81 -0
  125. package/template/src/atoms/MeetingLink.tsx +160 -0
  126. package/template/src/atoms/ParticipantsCount.tsx +18 -7
  127. package/template/src/atoms/Popup.tsx +49 -27
  128. package/template/src/atoms/PrimaryButton.tsx +19 -5
  129. package/template/src/atoms/RecordingInfo.tsx +2 -2
  130. package/template/src/atoms/SecondaryButton.tsx +2 -0
  131. package/template/src/atoms/Spacer.tsx +1 -0
  132. package/template/src/atoms/TertiaryButton.tsx +35 -5
  133. package/template/src/atoms/TextInput.tsx +2 -1
  134. package/template/src/atoms/Toolbar.tsx +64 -30
  135. package/template/src/atoms/ToolbarItem.tsx +11 -5
  136. package/template/src/atoms/ToolbarPreset.tsx +13 -2
  137. package/template/src/atoms/Tooltip.tsx +26 -4
  138. package/template/src/auth/AuthProvider.tsx +500 -0
  139. package/template/src/auth/AuthRoute.tsx +94 -0
  140. package/template/src/auth/IDPAuth.electron.tsx +31 -0
  141. package/template/src/auth/IDPAuth.tsx +67 -0
  142. package/template/src/auth/IDPLogoutComponent.tsx +158 -0
  143. package/template/src/auth/UserCancelPopup.tsx +115 -0
  144. package/template/src/auth/config.ts +52 -0
  145. package/template/src/auth/openIDPURL.electron.tsx +39 -0
  146. package/template/src/auth/openIDPURL.native.tsx +51 -0
  147. package/template/src/auth/openIDPURL.tsx +20 -0
  148. package/template/src/auth/useIDPAuth.electron.tsx +65 -0
  149. package/template/src/auth/useIDPAuth.native.tsx +70 -0
  150. package/template/src/auth/useIDPAuth.tsx +63 -0
  151. package/template/src/auth/useTokenAuth.tsx +194 -0
  152. package/template/src/components/Chat.tsx +5 -8
  153. package/template/src/components/ChatContext.ts +4 -0
  154. package/template/src/components/ColorConfigure.tsx +0 -1
  155. package/template/src/components/CommonStyles.ts +9 -2
  156. package/template/src/components/Controls.tsx +659 -52
  157. package/template/src/components/DeviceConfigure.tsx +362 -156
  158. package/template/src/components/DeviceContext.tsx +2 -0
  159. package/template/src/components/EventsConfigure.tsx +713 -109
  160. package/template/src/components/GraphQLProvider.tsx +62 -36
  161. package/template/src/components/GridVideo.tsx +23 -13
  162. package/template/src/components/HostControlView.tsx +11 -14
  163. package/template/src/components/JoinPhrase.tsx +0 -1
  164. package/template/src/components/Leftbar.tsx +4 -3
  165. package/template/src/components/Navbar.tsx +110 -42
  166. package/template/src/components/NavbarMobile.tsx +47 -36
  167. package/template/src/components/Navigation.native.tsx +1 -15
  168. package/template/src/{subComponents/screenshare/ScreenshareButton.native.tsx → components/Navigation.sdk.tsx} +17 -3
  169. package/template/src/components/Navigation.tsx +1 -15
  170. package/template/src/components/ParticipantsView.tsx +56 -48
  171. package/template/src/components/PinnedVideo.tsx +188 -114
  172. package/template/src/components/Precall.native.tsx +169 -67
  173. package/template/src/components/Precall.tsx +237 -71
  174. package/template/src/components/RTMConfigure.tsx +167 -55
  175. package/template/src/components/Rightbar.tsx +4 -3
  176. package/template/src/components/Router.electron.ts +1 -0
  177. package/template/src/components/Router.native.ts +1 -0
  178. package/template/src/components/Router.sdk.ts +1 -0
  179. package/template/src/components/Router.ts +1 -0
  180. package/template/src/components/SdkApiContext.tsx +179 -27
  181. package/template/src/components/SdkMuteToggleListener.tsx +88 -0
  182. package/template/src/components/SessionContext.tsx +0 -1
  183. package/template/src/components/Settings.tsx +25 -3
  184. package/template/src/components/SettingsView.tsx +44 -9
  185. package/template/src/components/Share.tsx +149 -71
  186. package/template/src/components/StorageContext.tsx +19 -5
  187. package/template/src/components/ToastComponent.tsx +3 -0
  188. package/template/src/components/WhiteboardLayout.tsx +291 -0
  189. package/template/src/components/chat-messages/useChatMessages.tsx +420 -207
  190. package/template/src/components/common/Error.tsx +2 -0
  191. package/template/src/components/common/Logo.tsx +2 -2
  192. package/template/src/components/contexts/LiveStreamDataContext.tsx +5 -4
  193. package/template/src/components/contexts/ScreenShareContext.tsx +15 -1
  194. package/template/src/components/contexts/WaitingRoomContext.tsx +50 -0
  195. package/template/src/components/contexts/WhiteboardContext.tsx +54 -54
  196. package/template/src/components/disable-chat/useDisableChat.tsx +32 -0
  197. package/template/src/components/livestream/LiveStreamContext.tsx +262 -177
  198. package/template/src/components/livestream/Types.ts +34 -18
  199. package/template/src/components/livestream/views/LiveStreamAttendeeLandingTile.tsx +295 -0
  200. package/template/src/components/livestream/views/LiveStreamControls.tsx +2 -4
  201. package/template/src/components/meeting-info-invite/MeetingInfo.tsx +82 -0
  202. package/template/src/components/meeting-info-invite/MeetingInfoCardHeader.tsx +86 -0
  203. package/template/src/components/meeting-info-invite/MeetingInfoGridTile.tsx +218 -0
  204. package/template/src/components/meeting-info-invite/MeetingInfoLinks.tsx +122 -0
  205. package/template/src/components/participants/AllAudienceParticipants.tsx +4 -5
  206. package/template/src/components/participants/AllHostParticipants.tsx +5 -6
  207. package/template/src/components/participants/Participant.tsx +40 -9
  208. package/template/src/components/participants/ParticipantSectionTitle.tsx +5 -2
  209. package/template/src/components/participants/ScreenshareParticipants.tsx +15 -17
  210. package/template/src/components/participants/UserActionMenuOptions.tsx +157 -49
  211. package/template/src/components/participants/WaitingRoomParticipants.tsx +74 -0
  212. package/template/src/components/popups/InvitePopup.tsx +110 -45
  213. package/template/src/components/popups/StartScreenSharePopup.native.tsx +182 -0
  214. package/template/src/components/popups/StartScreenSharePopup.tsx +6 -0
  215. package/template/src/components/popups/StopRecordingPopup.tsx +11 -5
  216. package/template/src/components/popups/StopScreenSharePopup.native.tsx +135 -0
  217. package/template/src/components/popups/StopScreenSharePopup.tsx +6 -0
  218. package/template/src/components/popups/WhiteboardClearAllPopup.tsx +123 -0
  219. package/template/src/components/precall/LocalMute.tsx +69 -45
  220. package/template/src/components/precall/PermissionHelper.tsx +52 -24
  221. package/template/src/components/precall/PreCallSettings.tsx +1 -0
  222. package/template/src/components/precall/VideoFallback.tsx +173 -0
  223. package/template/src/components/precall/VideoPreview.native.tsx +16 -50
  224. package/template/src/components/precall/VideoPreview.tsx +27 -162
  225. package/template/src/components/precall/index.tsx +2 -0
  226. package/template/src/components/precall/joinCallBtn.native.tsx +10 -3
  227. package/template/src/components/precall/joinCallBtn.tsx +11 -2
  228. package/template/src/components/precall/joinWaitingRoomBtn.native.tsx +210 -0
  229. package/template/src/components/precall/joinWaitingRoomBtn.tsx +250 -0
  230. package/template/src/components/precall/meetingTitle.tsx +35 -9
  231. package/template/src/components/precall/selectDevice.tsx +5 -5
  232. package/template/src/components/precall/textInput.tsx +16 -18
  233. package/template/src/components/precall/usePreCall.tsx +14 -4
  234. package/template/src/components/room-info/useRoomInfo.tsx +34 -0
  235. package/template/src/components/useShareLink.tsx +24 -59
  236. package/template/src/components/useUserPreference.tsx +73 -10
  237. package/template/src/components/useVideoCall.tsx +76 -3
  238. package/template/src/components/virtual-background/VBButton.tsx +64 -0
  239. package/template/src/components/virtual-background/VBCard.native.tsx +282 -0
  240. package/template/src/components/virtual-background/VBCard.tsx +272 -0
  241. package/template/src/components/virtual-background/VBPanel.tsx +279 -0
  242. package/template/src/components/virtual-background/VButils.native.ts +37 -0
  243. package/template/src/components/virtual-background/VButils.ts +104 -0
  244. package/template/src/components/virtual-background/VideoPreview.native.tsx +43 -0
  245. package/template/src/components/virtual-background/VideoPreview.tsx +106 -0
  246. package/template/src/components/virtual-background/imagePaths.ts +87 -0
  247. package/template/src/components/virtual-background/images/beachImageBase64.ts +1 -0
  248. package/template/src/components/virtual-background/images/bedroomImageBase64.ts +1 -0
  249. package/template/src/components/virtual-background/images/bookImageBase64.ts +1 -0
  250. package/template/src/components/virtual-background/images/earthImageBase64.ts +1 -0
  251. package/template/src/components/virtual-background/images/index.ts +37 -0
  252. package/template/src/components/virtual-background/images/lampImageBase64.ts +1 -0
  253. package/template/src/components/virtual-background/images/mountainsImageBase64.ts +1 -0
  254. package/template/src/components/virtual-background/images/office1ImageBase64.ts +1 -0
  255. package/template/src/components/virtual-background/images/officeImageBase64.ts +1 -0
  256. package/template/src/components/virtual-background/images/plantsImageBase64.ts +1 -0
  257. package/template/src/components/virtual-background/images/skyImageBase64.ts +1 -0
  258. package/template/src/components/virtual-background/images/wallImageBase64.ts +1 -0
  259. package/template/src/components/virtual-background/useVB.native.tsx +188 -0
  260. package/template/src/components/virtual-background/useVB.tsx +267 -0
  261. package/template/src/components/whiteboard/StrokeWidthTool.tsx +137 -0
  262. package/template/src/components/whiteboard/WhiteboardButton.tsx +93 -0
  263. package/template/src/components/whiteboard/WhiteboardCanvas.tsx +99 -0
  264. package/template/src/components/whiteboard/WhiteboardConfigure.native.tsx +137 -0
  265. package/template/src/components/whiteboard/WhiteboardConfigure.tsx +441 -0
  266. package/template/src/components/whiteboard/WhiteboardCursor.tsx +152 -0
  267. package/template/src/components/whiteboard/WhiteboardToolBox.tsx +1246 -0
  268. package/template/src/components/whiteboard/WhiteboardView.native.tsx +109 -0
  269. package/template/src/components/whiteboard/WhiteboardView.tsx +81 -0
  270. package/template/src/components/whiteboard/WhiteboardWidget.tsx +674 -0
  271. package/template/src/components/whiteboard/WhiteboardWrapper.tsx +38 -0
  272. package/template/src/language/default-labels/commonLabels.ts +51 -14
  273. package/template/src/language/default-labels/createScreenLabels.ts +97 -17
  274. package/template/src/language/default-labels/joinScreenLabels.ts +45 -6
  275. package/template/src/language/default-labels/precallScreenLabels.ts +145 -23
  276. package/template/src/language/default-labels/shareLinkScreenLabels.ts +85 -37
  277. package/template/src/language/default-labels/videoCallScreenLabels.ts +1137 -158
  278. package/template/src/pages/Create.tsx +125 -80
  279. package/template/src/pages/Join.tsx +76 -34
  280. package/template/src/pages/Login.tsx +26 -0
  281. package/template/src/pages/VideoCall.tsx +229 -114
  282. package/template/src/pages/video-call/ActionSheet.native.tsx +54 -7
  283. package/template/src/pages/video-call/ActionSheet.tsx +55 -16
  284. package/template/src/pages/video-call/ActionSheetContent.tsx +366 -291
  285. package/template/src/pages/video-call/ActionSheetHandle.tsx +7 -1
  286. package/template/src/pages/video-call/DefaultLayouts.ts +11 -5
  287. package/template/src/pages/video-call/NameWithMicIcon.tsx +17 -9
  288. package/template/src/pages/video-call/PinchableView.tsx +119 -0
  289. package/template/src/pages/video-call/RenderComponent.tsx +12 -3
  290. package/template/src/pages/video-call/SidePanelHeader.tsx +208 -6
  291. package/template/src/pages/video-call/VideoCallMobileView.tsx +140 -106
  292. package/template/src/pages/video-call/VideoCallScreen.native.tsx +3 -2
  293. package/template/src/pages/video-call/VideoCallScreen.tsx +113 -66
  294. package/template/src/pages/video-call/VideoComponent.tsx +53 -5
  295. package/template/src/pages/video-call/VideoRenderer.tsx +309 -52
  296. package/template/src/pages/video-call/VisibilitySensor.tsx +104 -0
  297. package/template/src/pages/video-call/ZoomableWrapper.native.tsx +34 -0
  298. package/template/src/pages/video-call/ZoomableWrapper.tsx +5 -0
  299. package/template/src/pages/video-call/index.ts +2 -0
  300. package/template/src/rtm/RTMEngine.ts +9 -4
  301. package/template/src/rtm-events/constants.ts +20 -0
  302. package/template/src/rtm-events-api/Events.ts +2 -0
  303. package/template/src/rtm-events-api/LocalEvents.ts +8 -0
  304. package/template/src/selection.json +1 -0
  305. package/template/src/subComponents/ChatBubble.tsx +81 -64
  306. package/template/src/subComponents/ChatContainer.tsx +20 -13
  307. package/template/src/subComponents/ChatInput.ios.tsx +11 -2
  308. package/template/src/subComponents/ChatInput.tsx +12 -3
  309. package/template/src/subComponents/Checkbox.native.tsx +46 -46
  310. package/template/src/subComponents/Checkbox.tsx +7 -6
  311. package/template/src/subComponents/CopyJoinInfo.tsx +26 -11
  312. package/template/src/subComponents/EndcallPopup.tsx +83 -12
  313. package/template/src/subComponents/LanguageSelector.tsx +34 -30
  314. package/template/src/subComponents/LayoutIconButton.tsx +30 -8
  315. package/template/src/subComponents/LayoutIconDropdown.tsx +19 -3
  316. package/template/src/subComponents/Loading.tsx +60 -0
  317. package/template/src/subComponents/LocalAudioMute.tsx +106 -30
  318. package/template/src/subComponents/LocalEndCall.tsx +91 -15
  319. package/template/src/subComponents/LocalSwitchCamera.tsx +50 -11
  320. package/template/src/subComponents/LocalVideoMute.tsx +126 -32
  321. package/template/src/subComponents/LogoutButton.tsx +1 -1
  322. package/template/src/subComponents/NetworkQualityPill.tsx +14 -31
  323. package/template/src/subComponents/Recording.tsx +23 -6
  324. package/template/src/subComponents/RemoteAudioMute.tsx +3 -3
  325. package/template/src/subComponents/RemoteMutePopup.tsx +55 -14
  326. package/template/src/subComponents/RemoteVideoMute.tsx +3 -3
  327. package/template/src/subComponents/RemoveMeetingPopup.tsx +19 -6
  328. package/template/src/subComponents/RemoveScreensharePopup.tsx +20 -5
  329. package/template/src/subComponents/ScreenShareNotice.tsx +11 -6
  330. package/template/src/subComponents/SelectDevice.tsx +98 -32
  331. package/template/src/subComponents/SidePanelEnum.tsx +2 -0
  332. package/template/src/subComponents/SidePanelHeader.tsx +97 -63
  333. package/template/src/subComponents/ToastConfig.tsx +70 -61
  334. package/template/src/subComponents/caption/Caption.tsx +130 -0
  335. package/template/src/subComponents/caption/CaptionContainer.tsx +302 -0
  336. package/template/src/subComponents/caption/CaptionIcon.tsx +111 -0
  337. package/template/src/subComponents/caption/CaptionText.tsx +182 -0
  338. package/template/src/subComponents/caption/DownloadTranscriptBtn.tsx +65 -0
  339. package/template/src/subComponents/caption/LanguageSelectorPopup.tsx +192 -0
  340. package/template/src/subComponents/caption/Transcript.tsx +449 -0
  341. package/template/src/subComponents/caption/TranscriptIcon.tsx +123 -0
  342. package/template/src/subComponents/caption/TranscriptText.tsx +98 -0
  343. package/template/src/subComponents/caption/index.ts +3 -0
  344. package/template/src/subComponents/caption/proto/ptoto.js +91 -0
  345. package/template/src/subComponents/caption/proto/test.proto +23 -0
  346. package/template/src/subComponents/caption/useCaption.tsx +123 -0
  347. package/template/src/subComponents/caption/useCaptionWidth.ts +27 -0
  348. package/template/src/subComponents/caption/useSTTAPI.tsx +179 -0
  349. package/template/src/subComponents/caption/useStreamMessageUtils.native.ts +211 -0
  350. package/template/src/subComponents/caption/useStreamMessageUtils.ts +235 -0
  351. package/template/src/subComponents/caption/useTranscriptDownload.native.ts +68 -0
  352. package/template/src/subComponents/caption/useTranscriptDownload.ts +52 -0
  353. package/template/src/subComponents/caption/utils.ts +125 -0
  354. package/template/src/subComponents/chat/ChatParticipants.tsx +53 -17
  355. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +11 -13
  356. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +33 -9
  357. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +1 -0
  358. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +10 -6
  359. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +28 -19
  360. package/template/src/subComponents/recording/useRecording.tsx +49 -20
  361. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +0 -1
  362. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +29 -10
  363. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +270 -66
  364. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +182 -95
  365. package/template/src/subComponents/screenshare/useScreenshare.tsx +2 -0
  366. package/template/src/subComponents/waiting-rooms/WaitingRoomControls.tsx +85 -0
  367. package/template/src/subComponents/waiting-rooms/useWaitingRoomAPI.ts +75 -0
  368. package/template/src/theme/index.ts +9 -0
  369. package/template/src/utils/SdkEvents.ts +14 -0
  370. package/template/src/utils/SdkMethodEvents.ts +23 -3
  371. package/template/src/utils/axiomLogger.ts +117 -0
  372. package/template/src/utils/book.jpg +0 -0
  373. package/template/src/utils/common.tsx +118 -6
  374. package/template/src/utils/endCallEveryOne.ts +7 -0
  375. package/template/src/utils/getCustomRoute.ts +7 -0
  376. package/template/src/utils/index.tsx +23 -0
  377. package/template/src/utils/useActionSheet.tsx +50 -0
  378. package/template/src/utils/useActiveSpeaker.ts +3 -7
  379. package/template/src/utils/useAppState.ts +17 -0
  380. package/template/src/utils/useAsyncEffect.ts +138 -0
  381. package/template/src/utils/useCreateRoom.ts +8 -12
  382. package/template/src/utils/useDisableButton.tsx +37 -0
  383. package/template/src/utils/useFindActiveSpeaker.native.ts +4 -0
  384. package/template/src/utils/useFindActiveSpeaker.ts +335 -0
  385. package/template/src/utils/useIsLocalUserSpeaking.native.ts +4 -0
  386. package/template/src/utils/useIsLocalUserSpeaking.ts +98 -0
  387. package/template/src/utils/useJoinRoom.ts +97 -36
  388. package/template/src/utils/useMuteToggleLocal.ts +114 -96
  389. package/template/src/utils/useString.ts +13 -3
  390. package/template/static.d.ts +42 -0
  391. package/template/tsconfig_rsdk_index.json +3 -3
  392. package/template/tsconfig_wsdk_index.json +1 -1
  393. package/template/web/index.html +20 -0
  394. package/template/webpack.commons.js +21 -10
  395. package/template/webpack.web.config.js +7 -3
  396. package/template/_buckconfig +0 -6
  397. package/template/_gitattributes +0 -1
  398. package/template/android/app/_BUCK +0 -55
  399. package/template/android/app/build_defs.bzl +0 -19
  400. package/template/ios/HelloWorld/AppDelegate.m +0 -74
  401. package/template/src/components/OAuth.electron.tsx +0 -41
  402. package/template/src/components/OAuth.native.tsx +0 -55
  403. package/template/src/components/OAuth.tsx +0 -30
  404. package/template/src/components/OAuthConfig.ts +0 -77
  405. package/template/src/components/Settings.native.tsx +0 -21
  406. package/template/src/components/StoreToken.tsx +0 -39
@@ -11,7 +11,7 @@
11
11
  */
12
12
  import {createHook} from 'customization-implementation';
13
13
  import React, {useState, useEffect, useRef, useContext} from 'react';
14
- import {useContent} from 'customization-api';
14
+ import {useContent, useRoomInfo} from 'customization-api';
15
15
  import {SidePanelType} from '../../subComponents/SidePanelEnum';
16
16
  import {
17
17
  useLocalUid,
@@ -28,6 +28,16 @@ import {timeNow} from '../../rtm/utils';
28
28
  import {useSidePanel} from '../../utils/useSidePanel';
29
29
  import getUniqueID from '../../utils/getUniqueID';
30
30
  import {trimText} from '../../utils/common';
31
+ import {useStringRef} from '../../utils/useString';
32
+ import {
33
+ publicChatToastHeading,
34
+ multiplePublicChatToastHeading,
35
+ multiplePrivateChatToastHeading,
36
+ privateChatToastHeading,
37
+ multiplePublicAndPrivateChatToastHeading,
38
+ multiplePublicAndPrivateChatToastSubHeading,
39
+ multiplePublicChatToastSubHeading,
40
+ } from '../../language/default-labels/videoCallScreenLabels';
31
41
 
32
42
  enum ChatMessageActionEnum {
33
43
  Create = 'Create_Chat_Message',
@@ -37,6 +47,7 @@ enum ChatMessageActionEnum {
37
47
 
38
48
  interface ChatMessagesProviderProps {
39
49
  children: React.ReactNode;
50
+ callActive: boolean;
40
51
  }
41
52
  export interface messageInterface {
42
53
  createdTimestamp: number;
@@ -68,32 +79,74 @@ const ChatMessagesContext = React.createContext<ChatMessagesInterface>({
68
79
  });
69
80
 
70
81
  const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
82
+ const isToastVisibleRef = useRef(false);
83
+ const previousNotificationRef = useRef([]);
84
+ const timeoutRef = useRef<any>();
85
+ const {callActive} = props;
86
+ const {
87
+ data: {isHost},
88
+ } = useRoomInfo();
71
89
  const {dispatch} = useContext(DispatchContext);
72
90
  const {defaultContent} = useContent();
73
91
  const localUid = useLocalUid();
74
92
  const {setSidePanel, sidePanel} = useSidePanel();
75
93
  const {chatType, setChatType, privateChatUser, setPrivateChatUser} =
76
94
  useChatUIControls();
77
- const {
78
- setUnreadGroupMessageCount,
79
- setUnreadIndividualMessageCount,
80
- unreadPrivateMessageCount,
81
- unreadIndividualMessageCount,
82
- setUnreadPrivateMessageCount,
83
- } = useChatNotification();
95
+ const {setUnreadGroupMessageCount, setUnreadIndividualMessageCount} =
96
+ useChatNotification();
84
97
  const [messageStore, setMessageStore] = useState<messageStoreInterface[]>([]);
85
98
  const [privateMessageStore, setPrivateMessageStore] = useState<{
86
99
  [key: string]: messageStoreInterface[];
87
100
  }>({});
88
101
 
89
102
  const defaultContentRef = useRef({defaultContent: defaultContent});
103
+
104
+ const isHostRef = useRef({isHost: isHost});
105
+ const callActiveRef = useRef({callActive: callActive});
106
+
90
107
  const groupActiveRef = useRef<boolean>(false);
91
108
  const individualActiveRef = useRef<string | number>();
92
109
 
93
- //commented for v1 release
94
- //const fromText = useString('messageSenderNotificationLabel');
95
- const fromText = (name: string) => `${name} commented in the public chat`;
96
- const privateMessageLabel = 'You’ve received a private message';
110
+ //public single
111
+ const fromText = useStringRef(publicChatToastHeading);
112
+
113
+ //public multple
114
+ const multiplePublicChatToastHeadingTT = useStringRef(
115
+ multiplePublicChatToastHeading,
116
+ );
117
+ //@ts-ignore
118
+ const multiplePublicChatToastSubHeadingTT = useStringRef<{
119
+ count: number;
120
+ from: string;
121
+ }>(multiplePublicChatToastSubHeading);
122
+
123
+ //private single
124
+ const privateMessageLabel = useStringRef(privateChatToastHeading);
125
+
126
+ //private multiple
127
+ //@ts-ignore
128
+ const multiplePrivateChatToastHeadingTT = useStringRef<{count: number}>(
129
+ multiplePrivateChatToastHeading,
130
+ );
131
+
132
+ //multiple private and public toast
133
+ const multiplePublicAndPrivateChatToastHeadingTT = useStringRef(
134
+ multiplePublicAndPrivateChatToastHeading,
135
+ );
136
+ //@ts-ignore
137
+ const multiplePublicAndPrivateChatToastSubHeadingTT = useStringRef<{
138
+ publicChatCount: number;
139
+ privateChatCount: number;
140
+ from: string;
141
+ }>(multiplePublicAndPrivateChatToastSubHeading);
142
+
143
+ useEffect(() => {
144
+ callActiveRef.current.callActive = callActive;
145
+ }, [callActive]);
146
+ useEffect(() => {
147
+ isHostRef.current.isHost = isHost;
148
+ }, [isHost]);
149
+
97
150
  useEffect(() => {
98
151
  defaultContentRef.current.defaultContent = defaultContent;
99
152
  }, [defaultContent]);
@@ -107,7 +160,8 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
107
160
  individualActiveRef.current = privateChatUser;
108
161
  }, [privateChatUser]);
109
162
 
110
- const openPrivateChat = (uidAsNumber) => {
163
+ const allEqual = arr => arr.every(val => val === arr[0]);
164
+ const openPrivateChat = uidAsNumber => {
111
165
  //move this logic into ChatContainer
112
166
  // setUnreadPrivateMessageCount(
113
167
  // unreadPrivateMessageCount -
@@ -137,6 +191,7 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
137
191
  msg: string,
138
192
  uid: string,
139
193
  isPrivateMessage: boolean = false,
194
+ forceStop: boolean = false,
140
195
  ) => {
141
196
  //don't show group message notification if group chat is open
142
197
  if (!isPrivateMessage && groupActiveRef.current) {
@@ -147,198 +202,356 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
147
202
  if (isPrivateMessage && uidAsNumber === individualActiveRef.current) {
148
203
  return;
149
204
  }
150
- Toast.show({
151
- primaryBtn: null,
152
- secondaryBtn: null,
153
- type: 'info',
154
- text1: isPrivateMessage
155
- ? privateMessageLabel
156
- : defaultContentRef.current.defaultContent[uidAsNumber]?.name
157
- ? fromText(
158
- trimText(
205
+ if (forceStop) {
206
+ return;
207
+ }
208
+ clearTimeout(timeoutRef.current);
209
+ isToastVisibleRef.current = true;
210
+ timeoutRef.current = setTimeout(() => {
211
+ isToastVisibleRef.current = false;
212
+ previousNotificationRef.current = [];
213
+ }, 3000);
214
+
215
+ previousNotificationRef.current.push({
216
+ isPrivateMessage: isPrivateMessage,
217
+ fromUid: isPrivateMessage ? uidAsNumber : 0,
218
+ from:
219
+ !isPrivateMessage &&
220
+ //@ts-ignore
221
+ defaultContentRef.current.defaultContent[uidAsNumber]?.name
222
+ ? trimText(
223
+ //@ts-ignore
159
224
  defaultContentRef.current.defaultContent[uidAsNumber]?.name,
160
- ),
161
- )
162
- : '',
163
- text2: isPrivateMessage
164
- ? ''
165
- : msg.length > 30
166
- ? msg.slice(0, 30) + '...'
167
- : msg,
168
- visibilityTime: 3000,
169
- onPress: () => {
170
- if (isPrivateMessage) {
171
- openPrivateChat(uidAsNumber);
172
- } else {
173
- //move this logic into ChatContainer
174
- // setUnreadGroupMessageCount(0);
175
- setPrivateChatUser(0);
176
- setChatType(ChatType.Group);
177
- setSidePanel(SidePanelType.Chat);
178
- }
179
- },
225
+ )
226
+ : '',
180
227
  });
181
- };
182
- events.on(EventNames.PUBLIC_CHAT_MESSAGE, (data) => {
183
- const payload = JSON.parse(data.payload);
184
- const messageAction = payload.action;
185
- const messageData = payload.value;
186
- switch (messageAction) {
187
- case ChatMessageActionEnum.Create:
188
- showMessageNotification(messageData.msg, `${data.sender}`);
189
- addMessageToStore(data.sender, {
190
- msg: messageData.msg,
191
- createdTimestamp: messageData.createdTimestamp,
192
- isDeleted: messageData.isDeleted,
193
- msgId: messageData.msgId,
194
- });
195
- /**
196
- * if chat group window is not active.
197
- * then we will increment the unread count
198
- */
199
- if (!groupActiveRef.current) {
200
- setUnreadGroupMessageCount((prevState) => {
201
- return prevState + 1;
202
- });
203
- }
204
- break;
205
- case ChatMessageActionEnum.Update:
206
- setMessageStore((prevState) => {
207
- const newState = prevState.map((item) => {
208
- if (
209
- item.msgId === messageData.msgId &&
210
- item.uid === data.sender
211
- ) {
212
- return {
213
- ...item,
214
- msg: messageData.msg,
215
- updatedTimestamp: messageData.updatedTimestamp,
216
- };
217
- } else {
218
- return item;
219
- }
220
- });
221
- return newState;
222
- });
223
- break;
224
- case ChatMessageActionEnum.Delete:
225
- setMessageStore((prevState) => {
226
- const newState = prevState.map((item) => {
227
- if (
228
- item.msgId === messageData.msgId &&
229
- item.uid === data.sender
230
- ) {
231
- return {
232
- ...item,
233
- isDeleted: true,
234
- updatedTimestamp: messageData.updatedTimestamp,
235
- };
236
- } else {
237
- return item;
238
- }
239
- });
240
- return newState;
241
- });
242
- break;
243
- default:
244
- break;
228
+
229
+ const privateMessages = previousNotificationRef.current.filter(
230
+ i => i.isPrivateMessage,
231
+ );
232
+ const publicMessages = previousNotificationRef.current.filter(
233
+ i => !i.isPrivateMessage,
234
+ );
235
+
236
+ //if 1 or more public and private messages
237
+ if (publicMessages && publicMessages.length > 1) {
238
+ const fromNamesArray = publicMessages
239
+ .filter(i => i.from !== undefined && i.from !== null && i.from !== '')
240
+ .map(i => i.from);
241
+ //removing the duplicate names
242
+ const fromNamesArrayUnique = [...new Set(fromNamesArray)];
243
+ //public chat with two name will seperated by "and"
244
+ //public chat with two or more name will have "and more" at the end
245
+ const fromNamesArrayUpdated =
246
+ fromNamesArrayUnique.length > 2
247
+ ? fromNamesArrayUnique
248
+ .slice(0, 2)
249
+ .map((i, index) => (index === 0 ? i + ', ' : i))
250
+ .concat(privateMessages?.length ? ', more' : ' and more')
251
+ : fromNamesArrayUnique.length == 2
252
+ ? fromNamesArrayUnique.map((i, index) =>
253
+ index === 0 ? i + ' and ' : i,
254
+ )
255
+ : fromNamesArrayUnique;
256
+ //converting the names array to string
257
+ const fromNames = fromNamesArrayUpdated.join('');
258
+ Toast.show({
259
+ //@ts-ignore
260
+ update: isToastVisibleRef.current ? true : false,
261
+ primaryBtn: null,
262
+ secondaryBtn: null,
263
+ type: 'info',
264
+ leadingIconName: 'chat-nav',
265
+ text1:
266
+ privateMessages && privateMessages.length
267
+ ? multiplePublicAndPrivateChatToastHeadingTT?.current()
268
+ : multiplePublicChatToastHeadingTT?.current(),
269
+ text2:
270
+ privateMessages && privateMessages.length
271
+ ? //@ts-ignore
272
+ multiplePublicAndPrivateChatToastSubHeadingTT?.current({
273
+ publicChatCount: publicMessages.length,
274
+ privateChatCount: privateMessages.length,
275
+ from: fromNames,
276
+ })
277
+ : //@ts-ignore
278
+ multiplePublicChatToastSubHeadingTT?.current({
279
+ count: publicMessages.length,
280
+ from: fromNames,
281
+ }),
282
+ visibilityTime: 3000,
283
+ onPress: () => {
284
+ if (isPrivateMessage) {
285
+ openPrivateChat(uidAsNumber);
286
+ } else {
287
+ //move this logic into ChatContainer
288
+ // setUnreadGroupMessageCount(0);
289
+ setPrivateChatUser(0);
290
+ setChatType(ChatType.Group);
291
+ setSidePanel(SidePanelType.Chat);
292
+ }
293
+ },
294
+ });
245
295
  }
246
- });
247
- events.on(EventNames.PRIVATE_CHAT_MESSAGE, (data) => {
248
- const payload = JSON.parse(data.payload);
249
- const messageAction = payload.action;
250
- const messageData = payload.value;
251
- switch (messageAction) {
252
- case ChatMessageActionEnum.Create:
253
- //To order chat participant based on recent message
254
- try {
255
- updateRenderListState(data.sender, {
256
- lastMessageTimeStamp: new Date().getTime(),
257
- });
258
- } catch (error) {
259
- console.log("ERROR : couldn't update the last message timestamp");
260
- }
261
- showMessageNotification(messageData.msg, `${data.sender}`, true);
262
- addMessageToPrivateStore(
263
- data.sender,
264
- {
296
+ //if one or more private message and no public messages
297
+ else if (privateMessages && privateMessages.length > 1) {
298
+ Toast.show({
299
+ //@ts-ignore
300
+ update: isToastVisibleRef.current ? true : false,
301
+ primaryBtn: null,
302
+ secondaryBtn: null,
303
+ type: 'info',
304
+ leadingIconName: 'chat-nav',
305
+ text1:
306
+ //@ts-ignore
307
+ multiplePrivateChatToastHeadingTT?.current({
308
+ count: privateMessages.length,
309
+ }),
310
+ text2: ``,
311
+ visibilityTime: 3000,
312
+ onPress: () => {
313
+ const openPrivateChatDetails = allEqual(
314
+ privateMessages.map(i => i.fromUid),
315
+ );
316
+ //if all private message comes from the single user then open details private chat
317
+ if (openPrivateChatDetails) {
318
+ openPrivateChat(privateMessages[0].fromUid);
319
+ }
320
+ //if private message comes from different user then open private tab not the private chatting window
321
+ else {
322
+ //open private tab (not the detail of private chat user)
323
+ setPrivateChatUser(0);
324
+ setChatType(ChatType.Group);
325
+ setSidePanel(SidePanelType.Chat);
326
+ }
327
+ },
328
+ });
329
+ }
330
+ //either 1 public or 1 private message
331
+ else {
332
+ Toast.show({
333
+ //@ts-ignore
334
+ update: isToastVisibleRef.current ? true : false,
335
+ primaryBtn: null,
336
+ secondaryBtn: null,
337
+ type: 'info',
338
+ leadingIconName: 'chat-nav',
339
+ text1: isPrivateMessage
340
+ ? privateMessageLabel?.current()
341
+ : //@ts-ignore
342
+ defaultContentRef.current.defaultContent[uidAsNumber]?.name
343
+ ? fromText?.current(
344
+ trimText(
345
+ //@ts-ignore
346
+ defaultContentRef.current.defaultContent[uidAsNumber]?.name,
347
+ ),
348
+ )
349
+ : '',
350
+ text2: isPrivateMessage
351
+ ? ''
352
+ : msg.length > 30
353
+ ? msg.slice(0, 30) + '...'
354
+ : msg,
355
+ visibilityTime: 3000,
356
+ onPress: () => {
357
+ if (isPrivateMessage) {
358
+ openPrivateChat(uidAsNumber);
359
+ } else {
360
+ //move this logic into ChatContainer
361
+ // setUnreadGroupMessageCount(0);
362
+ setPrivateChatUser(0);
363
+ setChatType(ChatType.Group);
364
+ setSidePanel(SidePanelType.Chat);
365
+ }
366
+ },
367
+ });
368
+ }
369
+ };
370
+ const unsubPublicChatMessage = events.on(
371
+ EventNames.PUBLIC_CHAT_MESSAGE,
372
+ data => {
373
+ const forceStop =
374
+ $config.ENABLE_WAITING_ROOM &&
375
+ !isHostRef.current.isHost &&
376
+ !callActiveRef.current.callActive;
377
+ //if call is not active don't store the message in the state
378
+ if (forceStop) {
379
+ return;
380
+ }
381
+ const payload = JSON.parse(data.payload);
382
+ const messageAction = payload.action;
383
+ const messageData = payload.value;
384
+ switch (messageAction) {
385
+ case ChatMessageActionEnum.Create:
386
+ showMessageNotification(
387
+ messageData.msg,
388
+ `${data.sender}`,
389
+ false,
390
+ forceStop,
391
+ );
392
+ addMessageToStore(data.sender, {
265
393
  msg: messageData.msg,
266
394
  createdTimestamp: messageData.createdTimestamp,
267
- msgId: messageData.msgId,
268
395
  isDeleted: messageData.isDeleted,
269
- },
270
- false,
271
- );
272
- /**
273
- * if user's private window is active.
274
- * then we will not increment the unread count
275
- */
276
-
277
- if (!(individualActiveRef.current === data.sender)) {
278
- setUnreadIndividualMessageCount((prevState) => {
279
- const prevCount =
280
- prevState && prevState[data.sender]
281
- ? prevState[data.sender]
282
- : 0;
283
- return {
284
- ...prevState,
285
- [data.sender]: prevCount + 1,
286
- };
396
+ msgId: messageData.msgId,
287
397
  });
288
- }
289
- break;
290
- case ChatMessageActionEnum.Update:
291
- setPrivateMessageStore((prevState) => {
292
- const privateChatOfUid = prevState[data.sender];
293
- const updatedData = privateChatOfUid.map((item) => {
294
- if (
295
- item.msgId === messageData.msgId &&
296
- item.uid === data.sender
297
- ) {
298
- return {
299
- ...item,
300
- msg: messageData.msg,
301
- updatedTimestamp: messageData.updatedTimestamp,
302
- };
303
- } else {
304
- return item;
305
- }
398
+ /**
399
+ * if chat group window is not active.
400
+ * then we will increment the unread count
401
+ */
402
+ if (!groupActiveRef.current) {
403
+ setUnreadGroupMessageCount(prevState => {
404
+ return prevState + 1;
405
+ });
406
+ }
407
+ break;
408
+ case ChatMessageActionEnum.Update:
409
+ setMessageStore(prevState => {
410
+ const newState = prevState.map(item => {
411
+ if (
412
+ item.msgId === messageData.msgId &&
413
+ item.uid === data.sender
414
+ ) {
415
+ return {
416
+ ...item,
417
+ msg: messageData.msg,
418
+ updatedTimestamp: messageData.updatedTimestamp,
419
+ };
420
+ } else {
421
+ return item;
422
+ }
423
+ });
424
+ return newState;
306
425
  });
307
- const newState = {
308
- ...prevState,
309
- [data.sender]: updatedData,
310
- };
311
- return newState;
312
- });
313
- break;
314
- case ChatMessageActionEnum.Delete:
315
- setPrivateMessageStore((prevState) => {
316
- const privateChatOfUid = prevState[data.sender];
317
- const updatedData = privateChatOfUid.map((item) => {
318
- if (
319
- item.msgId === messageData.msgId &&
320
- item.uid === data.sender
321
- ) {
426
+ break;
427
+ case ChatMessageActionEnum.Delete:
428
+ setMessageStore(prevState => {
429
+ const newState = prevState.map(item => {
430
+ if (
431
+ item.msgId === messageData.msgId &&
432
+ item.uid === data.sender
433
+ ) {
434
+ return {
435
+ ...item,
436
+ isDeleted: true,
437
+ updatedTimestamp: messageData.updatedTimestamp,
438
+ };
439
+ } else {
440
+ return item;
441
+ }
442
+ });
443
+ return newState;
444
+ });
445
+ break;
446
+ default:
447
+ break;
448
+ }
449
+ },
450
+ );
451
+
452
+ const unsubPrivateChatMessage = events.on(
453
+ EventNames.PRIVATE_CHAT_MESSAGE,
454
+ data => {
455
+ const payload = JSON.parse(data.payload);
456
+ const messageAction = payload.action;
457
+ const messageData = payload.value;
458
+ switch (messageAction) {
459
+ case ChatMessageActionEnum.Create:
460
+ //To order chat participant based on recent message
461
+ try {
462
+ updateRenderListState(data.sender, {
463
+ lastMessageTimeStamp: new Date().getTime(),
464
+ });
465
+ } catch (error) {
466
+ console.log("ERROR : couldn't update the last message timestamp");
467
+ }
468
+ showMessageNotification(messageData.msg, `${data.sender}`, true);
469
+ addMessageToPrivateStore(
470
+ data.sender,
471
+ {
472
+ msg: messageData.msg,
473
+ createdTimestamp: messageData.createdTimestamp,
474
+ msgId: messageData.msgId,
475
+ isDeleted: messageData.isDeleted,
476
+ },
477
+ false,
478
+ );
479
+ /**
480
+ * if user's private window is active.
481
+ * then we will not increment the unread count
482
+ */
483
+
484
+ if (!(individualActiveRef.current === data.sender)) {
485
+ setUnreadIndividualMessageCount(prevState => {
486
+ const prevCount =
487
+ prevState && prevState[data.sender]
488
+ ? prevState[data.sender]
489
+ : 0;
322
490
  return {
323
- ...item,
324
- isDeleted: true,
325
- updatedTimestamp: messageData.updatedTimestamp,
491
+ ...prevState,
492
+ [data.sender]: prevCount + 1,
326
493
  };
327
- } else {
328
- return item;
329
- }
494
+ });
495
+ }
496
+ break;
497
+ case ChatMessageActionEnum.Update:
498
+ setPrivateMessageStore(prevState => {
499
+ const privateChatOfUid = prevState[data.sender];
500
+ const updatedData = privateChatOfUid.map(item => {
501
+ if (
502
+ item.msgId === messageData.msgId &&
503
+ item.uid === data.sender
504
+ ) {
505
+ return {
506
+ ...item,
507
+ msg: messageData.msg,
508
+ updatedTimestamp: messageData.updatedTimestamp,
509
+ };
510
+ } else {
511
+ return item;
512
+ }
513
+ });
514
+ const newState = {
515
+ ...prevState,
516
+ [data.sender]: updatedData,
517
+ };
518
+ return newState;
330
519
  });
331
- const newState = {
332
- ...prevState,
333
- [data.sender]: updatedData,
334
- };
335
- return newState;
336
- });
337
- break;
338
- default:
339
- break;
340
- }
341
- });
520
+ break;
521
+ case ChatMessageActionEnum.Delete:
522
+ setPrivateMessageStore(prevState => {
523
+ const privateChatOfUid = prevState[data.sender];
524
+ const updatedData = privateChatOfUid.map(item => {
525
+ if (
526
+ item.msgId === messageData.msgId &&
527
+ item.uid === data.sender
528
+ ) {
529
+ return {
530
+ ...item,
531
+ isDeleted: true,
532
+ updatedTimestamp: messageData.updatedTimestamp,
533
+ };
534
+ } else {
535
+ return item;
536
+ }
537
+ });
538
+ const newState = {
539
+ ...prevState,
540
+ [data.sender]: updatedData,
541
+ };
542
+ return newState;
543
+ });
544
+ break;
545
+ default:
546
+ break;
547
+ }
548
+ },
549
+ );
550
+
551
+ return () => {
552
+ unsubPublicChatMessage();
553
+ unsubPrivateChatMessage();
554
+ };
342
555
  }, []);
343
556
 
344
557
  const addMessageToStore = (uid: UidType, body: messageInterface) => {
@@ -361,7 +574,7 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
361
574
  body: messageInterface,
362
575
  local: boolean,
363
576
  ) => {
364
- setPrivateMessageStore((state) => {
577
+ setPrivateMessageStore(state => {
365
578
  let newState = {...state};
366
579
  newState[uid] !== undefined
367
580
  ? (newState[uid] = [
@@ -432,7 +645,7 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
432
645
  if (typeof msg == 'string' && msg.trim() === '') return;
433
646
  if (toUid) {
434
647
  const checkData = privateMessageStore[toUid].filter(
435
- (item) => item.msgId === msgId && item.uid === localUid,
648
+ item => item.msgId === msgId && item.uid === localUid,
436
649
  );
437
650
  if (checkData && checkData.length) {
438
651
  const editMsgData = {msg, updatedTimestamp: timeNow()};
@@ -445,9 +658,9 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
445
658
  PersistanceLevel.None,
446
659
  toUid,
447
660
  );
448
- setPrivateMessageStore((prevState) => {
661
+ setPrivateMessageStore(prevState => {
449
662
  const privateChatOfUid = prevState[toUid];
450
- const updatedData = privateChatOfUid.map((item) => {
663
+ const updatedData = privateChatOfUid.map(item => {
451
664
  if (item.msgId === msgId) {
452
665
  return {...item, ...editMsgData};
453
666
  } else {
@@ -463,7 +676,7 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
463
676
  } else {
464
677
  //check if user has permission to edit
465
678
  const checkData = messageStore.filter(
466
- (item) => item.msgId === msgId && item.uid === localUid,
679
+ item => item.msgId === msgId && item.uid === localUid,
467
680
  );
468
681
  if (checkData && checkData.length) {
469
682
  const editMsgData = {msg, updatedTimestamp: timeNow()};
@@ -475,8 +688,8 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
475
688
  }),
476
689
  PersistanceLevel.None,
477
690
  );
478
- setMessageStore((prevState) => {
479
- const newState = prevState.map((item) => {
691
+ setMessageStore(prevState => {
692
+ const newState = prevState.map(item => {
480
693
  if (item.msgId === msgId) {
481
694
  return {...item, ...editMsgData};
482
695
  } else {
@@ -494,7 +707,7 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
494
707
  const deleteChatMessage = (msgId: string, toUid?: UidType) => {
495
708
  if (toUid) {
496
709
  const checkData = privateMessageStore[toUid].filter(
497
- (item) => item.msgId === msgId && item.uid === localUid,
710
+ item => item.msgId === msgId && item.uid === localUid,
498
711
  );
499
712
  if (checkData && checkData.length) {
500
713
  const deleteMsgData = {updatedTimestamp: timeNow()};
@@ -507,9 +720,9 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
507
720
  PersistanceLevel.None,
508
721
  toUid,
509
722
  );
510
- setPrivateMessageStore((prevState) => {
723
+ setPrivateMessageStore(prevState => {
511
724
  const privateChatOfUid = prevState[toUid];
512
- const updatedData = privateChatOfUid.map((item) => {
725
+ const updatedData = privateChatOfUid.map(item => {
513
726
  if (item.msgId === msgId) {
514
727
  return {...item, isDeleted: true, ...deleteMsgData};
515
728
  } else {
@@ -525,7 +738,7 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
525
738
  } else {
526
739
  //check if user has permission to delete
527
740
  const checkData = messageStore.filter(
528
- (item) => item.msgId === msgId && item.uid === localUid,
741
+ item => item.msgId === msgId && item.uid === localUid,
529
742
  );
530
743
  if (checkData && checkData.length) {
531
744
  const deleteMsgData = {updatedTimestamp: timeNow()};
@@ -537,8 +750,8 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
537
750
  }),
538
751
  PersistanceLevel.None,
539
752
  );
540
- setMessageStore((prevState) => {
541
- const newState = prevState.map((item) => {
753
+ setMessageStore(prevState => {
754
+ const newState = prevState.map(item => {
542
755
  if (item.msgId === msgId) {
543
756
  return {...item, isDeleted: true, ...deleteMsgData};
544
757
  } else {