@trtc/calls-uikit-react 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (426) hide show
  1. package/README-zh_CN.md +97 -0
  2. package/README.md +104 -0
  3. package/debug/GenerateTestUserSig-es.js +26 -0
  4. package/debug/lib-generate-test-usersig-es.min.js +2 -0
  5. package/package.json +42 -0
  6. package/src/Components/TUICallKit/TUICallKit.module.scss +21 -0
  7. package/src/Components/TUICallKit/TUICallKit.tsx +267 -0
  8. package/src/Components/TUICallKit/index.ts +3 -0
  9. package/src/Components/assets/base/close.svg +1 -0
  10. package/src/Components/assets/base/error.svg +1 -0
  11. package/src/Components/assets/base/info.svg +1 -0
  12. package/src/Components/assets/base/loading-circle.svg +1 -0
  13. package/src/Components/assets/base/success.svg +1 -0
  14. package/src/Components/assets/base/waring.svg +1 -0
  15. package/src/Components/assets/button/accept.svg +10 -0
  16. package/src/Components/assets/button/backgroundBlurClose.svg +3 -0
  17. package/src/Components/assets/button/backgroundBlurOpen.svg +3 -0
  18. package/src/Components/assets/button/camera-close.svg +8 -0
  19. package/src/Components/assets/button/camera-open.svg +3 -0
  20. package/src/Components/assets/button/desktop/arrow.png +0 -0
  21. package/src/Components/assets/button/desktop/fullScreen.svg +4 -0
  22. package/src/Components/assets/button/desktop/minimize.svg +6 -0
  23. package/src/Components/assets/button/hangup.svg +3 -0
  24. package/src/Components/assets/button/microphone-close.svg +4 -0
  25. package/src/Components/assets/button/microphone-open.svg +4 -0
  26. package/src/Components/assets/button/mobile/down.svg +4 -0
  27. package/src/Components/assets/button/mobile/minimize.svg +4 -0
  28. package/src/Components/assets/button/mobile/switch-camera.svg +3 -0
  29. package/src/Components/assets/button/mobile/up.svg +4 -0
  30. package/src/Components/assets/button/speaker-close.svg +4 -0
  31. package/src/Components/assets/button/speaker-open.svg +3 -0
  32. package/src/Components/assets/button/switch-audio.svg +3 -0
  33. package/src/Components/assets/callMessage/audioCall.svg +3 -0
  34. package/src/Components/assets/callMessage/videoCall.svg +3 -0
  35. package/src/Components/assets/common/defaultAvatar.svg +11 -0
  36. package/src/Components/assets/common/microphone-volumn-close.svg +9 -0
  37. package/src/Components/assets/floatingWindow/desktop/floatCallEnd.svg +3 -0
  38. package/src/Components/assets/floatingWindow/desktop/floatFullScreen.svg +3 -0
  39. package/src/Components/assets/floatingWindow/desktop/floatMicrophone.svg +4 -0
  40. package/src/Components/assets/floatingWindow/desktop/floatMicrophoneClosed.svg +3 -0
  41. package/src/Components/assets/floatingWindow/mobile/camera-close.svg +14 -0
  42. package/src/Components/assets/floatingWindow/mobile/camera-open.svg +14 -0
  43. package/src/Components/assets/floatingWindow/mobile/earphone.svg +3 -0
  44. package/src/Components/assets/floatingWindow/mobile/microphone-close.svg +4 -0
  45. package/src/Components/assets/floatingWindow/mobile/microphone-open.svg +4 -0
  46. package/src/Components/assets/permission/desktop/index.ts +11 -0
  47. package/src/Components/assets/permission/desktop/mac/permit-en.jpg +0 -0
  48. package/src/Components/assets/permission/desktop/mac/permit-zh.jpg +0 -0
  49. package/src/Components/assets/permission/desktop/win/permit-en.png +0 -0
  50. package/src/Components/assets/permission/desktop/win/permit-zh.png +0 -0
  51. package/src/Components/assets/streamInfo/mobile/microphone-close-group.svg +19 -0
  52. package/src/Components/assets/streamInfo/mobile/microphone-close-single.svg +6 -0
  53. package/src/Components/assets/streamInfo/mobile/volumn.svg +20 -0
  54. package/src/Components/assets/streamInfo/networkStatus.svg +22 -0
  55. package/src/Components/components/GroupCall/GroupCall.module.scss +13 -0
  56. package/src/Components/components/GroupCall/GroupCall.tsx +82 -0
  57. package/src/Components/components/GroupCall/MediaContainer/AudioStream/AudioStream.tsx +41 -0
  58. package/src/Components/components/GroupCall/MediaContainer/MediaContainer.module.scss +74 -0
  59. package/src/Components/components/GroupCall/MediaContainer/MediaContainer.tsx +138 -0
  60. package/src/Components/components/GroupCall/MediaContainer/StreamLoading/StreamLoading.tsx +48 -0
  61. package/src/Components/components/GroupCall/MediaContainer/index.ts +3 -0
  62. package/src/Components/components/GroupCall/Waiting/Waiting.module.scss +44 -0
  63. package/src/Components/components/GroupCall/Waiting/Waiting.tsx +89 -0
  64. package/src/Components/components/SingleCall/MediaContainer/AudioStream/AudioStream.tsx +86 -0
  65. package/src/Components/components/SingleCall/MediaContainer/MediaContainer.module.scss +33 -0
  66. package/src/Components/components/SingleCall/MediaContainer/MediaContainer.tsx +121 -0
  67. package/src/Components/components/SingleCall/MediaContainer/hooks/useGetLargeViewName.ts +29 -0
  68. package/src/Components/components/SingleCall/MediaContainer/index.ts +3 -0
  69. package/src/Components/components/SingleCall/SingleCall.module.scss +28 -0
  70. package/src/Components/components/SingleCall/SingleCall.tsx +54 -0
  71. package/src/Components/components/SingleCall/Waiting/Waiting.module.scss +3 -0
  72. package/src/Components/components/SingleCall/Waiting/Waiting.tsx +45 -0
  73. package/src/Components/components/base/Avatar/Avatar.scss +28 -0
  74. package/src/Components/components/base/Avatar/Avatar.tsx +52 -0
  75. package/src/Components/components/base/Avatar/index.ts +3 -0
  76. package/src/Components/components/base/Button/Button.scss +122 -0
  77. package/src/Components/components/base/Button/Button.tsx +107 -0
  78. package/src/Components/components/base/Button/index.ts +3 -0
  79. package/src/Components/components/base/Drag/Drag.tsx +155 -0
  80. package/src/Components/components/base/Drag/index.tsx +3 -0
  81. package/src/Components/components/base/Grid/Col/Col.scss +31 -0
  82. package/src/Components/components/base/Grid/Col/Col.tsx +52 -0
  83. package/src/Components/components/base/Grid/Col/index.ts +3 -0
  84. package/src/Components/components/base/Grid/Row/Row.scss +27 -0
  85. package/src/Components/components/base/Grid/Row/Row.tsx +51 -0
  86. package/src/Components/components/base/Grid/Row/index.ts +5 -0
  87. package/src/Components/components/base/Grid/style/mixin.scss +61 -0
  88. package/src/Components/components/base/GridLayout/GridLayout.tsx +189 -0
  89. package/src/Components/components/base/GridLayout/GridPlusItem/GridPlusItem.scss +11 -0
  90. package/src/Components/components/base/GridLayout/GridPlusItem/GridPlusItem.tsx +37 -0
  91. package/src/Components/components/base/GridLayout/index.ts +7 -0
  92. package/src/Components/components/base/Icon/Icon.tsx +25 -0
  93. package/src/Components/components/base/Loading/Circle/Cilrcle.tsx +20 -0
  94. package/src/Components/components/base/Loading/Circle/Circle.scss +29 -0
  95. package/src/Components/components/base/Loading/Dot/Dot.scss +69 -0
  96. package/src/Components/components/base/Loading/Dot/Dot.tsx +21 -0
  97. package/src/Components/components/base/Loading/Loading.scss +22 -0
  98. package/src/Components/components/base/Loading/Loading.tsx +47 -0
  99. package/src/Components/components/base/Loading/index.ts +3 -0
  100. package/src/Components/components/base/Message/Message.scss +61 -0
  101. package/src/Components/components/base/Message/Message.tsx +94 -0
  102. package/src/Components/components/base/Message/MessageIcon/Error.tsx +7 -0
  103. package/src/Components/components/base/Message/MessageIcon/Info.tsx +7 -0
  104. package/src/Components/components/base/Message/MessageIcon/Success.tsx +8 -0
  105. package/src/Components/components/base/Message/MessageIcon/Warning.tsx +7 -0
  106. package/src/Components/components/base/Message/MessagePlugin.tsx +148 -0
  107. package/src/Components/components/base/Overlayer/Overlayer.scss +17 -0
  108. package/src/Components/components/base/Overlayer/Overlayer.tsx +49 -0
  109. package/src/Components/components/base/Popup/Popup.scss +34 -0
  110. package/src/Components/components/base/Popup/Popup.tsx +91 -0
  111. package/src/Components/components/base/Popup/hooks/useTrigger.tsx +67 -0
  112. package/src/Components/components/base/Portal/Portal.tsx +74 -0
  113. package/src/Components/components/base/Text/Text.scss +15 -0
  114. package/src/Components/components/base/Text/Text.tsx +30 -0
  115. package/src/Components/components/base/Time/Time.scss +14 -0
  116. package/src/Components/components/base/Time/Time.tsx +13 -0
  117. package/src/Components/components/base/ToggleWindow/ToggleWindow.scss +9 -0
  118. package/src/Components/components/base/ToggleWindow/ToggleWindow.tsx +83 -0
  119. package/src/Components/components/base/ToggleWindow/ToggleWindowItem/ToggleWindowItem.scss +51 -0
  120. package/src/Components/components/base/ToggleWindow/ToggleWindowItem/ToggleWindowItem.tsx +50 -0
  121. package/src/Components/components/base/ToggleWindow/index.ts +7 -0
  122. package/src/Components/components/base/common.ts +13 -0
  123. package/src/Components/components/base/hooks/useControlled.ts +31 -0
  124. package/src/Components/components/base/hooks/useDrag.ts +96 -0
  125. package/src/Components/components/base/hooks/useListenerEvent.ts +37 -0
  126. package/src/Components/components/base/hooks/useMutationObserver.ts +38 -0
  127. package/src/Components/components/base/hooks/useOnClickOutSide.ts +24 -0
  128. package/src/Components/components/base/util/index.ts +26 -0
  129. package/src/Components/components/common/ButtonPanel/ButtonPanel.tsx +127 -0
  130. package/src/Components/components/common/ButtonPanel/ButtonPanelH5/ButtonPanelH5.module.scss +67 -0
  131. package/src/Components/components/common/ButtonPanel/ButtonPanelH5/ButtonPanelH5.tsx +153 -0
  132. package/src/Components/components/common/ButtonPanel/ButtonPanelPC/ButtonPanelPC.module.scss +9 -0
  133. package/src/Components/components/common/ButtonPanel/ButtonPanelPC/ButtonPanelPC.tsx +32 -0
  134. package/src/Components/components/common/ButtonPanel/button/Accept/Accept.module.scss +7 -0
  135. package/src/Components/components/common/ButtonPanel/button/Accept/Accept.tsx +39 -0
  136. package/src/Components/components/common/ButtonPanel/button/Accept/index.ts +3 -0
  137. package/src/Components/components/common/ButtonPanel/button/BackgroundBlur/BackgroundBlur.module.scss +15 -0
  138. package/src/Components/components/common/ButtonPanel/button/BackgroundBlur/BackgroundBlur.tsx +46 -0
  139. package/src/Components/components/common/ButtonPanel/button/BackgroundBlur/index.ts +3 -0
  140. package/src/Components/components/common/ButtonPanel/button/Camera.tsx +81 -0
  141. package/src/Components/components/common/ButtonPanel/button/FullScreen/FullScreen.module.scss +13 -0
  142. package/src/Components/components/common/ButtonPanel/button/FullScreen/FullScreen.tsx +26 -0
  143. package/src/Components/components/common/ButtonPanel/button/FullScreen/index.ts +3 -0
  144. package/src/Components/components/common/ButtonPanel/button/Hangup/Hangup.module.scss +7 -0
  145. package/src/Components/components/common/ButtonPanel/button/Hangup/Hangup.tsx +42 -0
  146. package/src/Components/components/common/ButtonPanel/button/Hangup/index.ts +3 -0
  147. package/src/Components/components/common/ButtonPanel/button/Microphone.tsx +78 -0
  148. package/src/Components/components/common/ButtonPanel/button/Minimize/Minimize.module.scss +23 -0
  149. package/src/Components/components/common/ButtonPanel/button/Minimize/Minimize.tsx +35 -0
  150. package/src/Components/components/common/ButtonPanel/button/Minimize/index.ts +3 -0
  151. package/src/Components/components/common/ButtonPanel/button/Reject/Reject.module.scss +7 -0
  152. package/src/Components/components/common/ButtonPanel/button/Reject/Reject.tsx +39 -0
  153. package/src/Components/components/common/ButtonPanel/button/Reject/index.ts +3 -0
  154. package/src/Components/components/common/ButtonPanel/button/Speaker.tsx +75 -0
  155. package/src/Components/components/common/ButtonPanel/button/SwitchAudioCall.tsx +32 -0
  156. package/src/Components/components/common/ButtonPanel/button/SwitchCamera.tsx +19 -0
  157. package/src/Components/components/common/ButtonPanel/button/common.module.scss +51 -0
  158. package/src/Components/components/common/ButtonPanel/config.ts +505 -0
  159. package/src/Components/components/common/ButtonPanel/index.ts +3 -0
  160. package/src/Components/components/common/CallMessage/CallMessage.tsx +18 -0
  161. package/src/Components/components/common/CallMessage/CallMessageC2C/CallMessageC2C.module.scss +19 -0
  162. package/src/Components/components/common/CallMessage/CallMessageC2C/CallMessageC2C.tsx +84 -0
  163. package/src/Components/components/common/CallMessage/CallMessageGroup/CallMessageGroup.module.scss +5 -0
  164. package/src/Components/components/common/CallMessage/CallMessageGroup/CallMessageGroup.tsx +37 -0
  165. package/src/Components/components/common/CallMessage/index.ts +3 -0
  166. package/src/Components/components/common/DeviceSelector/DeviceSelector.module.scss +62 -0
  167. package/src/Components/components/common/DeviceSelector/DeviceSelector.tsx +105 -0
  168. package/src/Components/components/common/FloatingWindow/FloatingWindow.tsx +37 -0
  169. package/src/Components/components/common/FloatingWindow/FloatingWindowGroupCall/FloatingWindowGroupCall.tsx +97 -0
  170. package/src/Components/components/common/FloatingWindow/FloatingWindowGroupCall/style/FloatingWindowGroupCall.module.scss +2 -0
  171. package/src/Components/components/common/FloatingWindow/FloatingWindowGroupCall/style/mobile.module.scss +126 -0
  172. package/src/Components/components/common/FloatingWindow/FloatingWindowGroupCall/style/pc.module.scss +126 -0
  173. package/src/Components/components/common/FloatingWindow/FloatingWindowSingleCall/FloatingWindowSingleCall.tsx +75 -0
  174. package/src/Components/components/common/FloatingWindow/FloatingWindowSingleCall/style/FloatingWindowSingleCall.module.scss +2 -0
  175. package/src/Components/components/common/FloatingWindow/FloatingWindowSingleCall/style/mobile.module.scss +117 -0
  176. package/src/Components/components/common/FloatingWindow/FloatingWindowSingleCall/style/pc.module.scss +123 -0
  177. package/src/Components/components/common/FloatingWindow/index.ts +3 -0
  178. package/src/Components/components/common/MicrophoneVolumn/MicrophoneVolumn.module.scss +9 -0
  179. package/src/Components/components/common/MicrophoneVolumn/MicrophoneVolumn.tsx +50 -0
  180. package/src/Components/components/common/OverlayStream/OverlayStream.module.scss +165 -0
  181. package/src/Components/components/common/OverlayStream/OverlayStream.tsx +119 -0
  182. package/src/Components/components/common/Player/Player.module.scss +11 -0
  183. package/src/Components/components/common/Player/Player.tsx +75 -0
  184. package/src/Components/components/common/Pusher/Pusher.module.scss +10 -0
  185. package/src/Components/components/common/Pusher/Pusher.tsx +96 -0
  186. package/src/Components/components/common/StreamInfo/StreamInfo.tsx +10 -0
  187. package/src/Components/components/common/StreamInfo/StreamInfoH5/StreamInfoH5.module.scss +21 -0
  188. package/src/Components/components/common/StreamInfo/StreamInfoH5/StreamInfoH5.tsx +95 -0
  189. package/src/Components/components/common/StreamInfo/StreamInfoPC/StreamInfoPC.module.scss +38 -0
  190. package/src/Components/components/common/StreamInfo/StreamInfoPC/StreamInfoPC.tsx +35 -0
  191. package/src/Components/components/common/StreamInfo/index.ts +3 -0
  192. package/src/Components/components/common/Tip/Tip.tsx +68 -0
  193. package/src/Components/components/common/TopBar/TopBar.tsx +17 -0
  194. package/src/Components/components/common/TopBar/h5/TopBarH5.module.scss +12 -0
  195. package/src/Components/components/common/TopBar/h5/TopBarH5.tsx +40 -0
  196. package/src/Components/components/common/TopBar/pc/TopBarPC.module.scss +8 -0
  197. package/src/Components/components/common/TopBar/pc/TopBarPC.tsx +36 -0
  198. package/src/Components/const/common.ts +15 -0
  199. package/src/Components/context/CallUserInfoContext.ts +21 -0
  200. package/src/Components/context/CallerUserInfoContext.ts +11 -0
  201. package/src/Components/context/CustomUIConfigContext.ts +6 -0
  202. package/src/Components/context/FocusItemContext.ts +13 -0
  203. package/src/Components/context/IsClickableContext.ts +5 -0
  204. package/src/Components/context/TranslateContext.ts +6 -0
  205. package/src/Components/context/UserInfoContext.ts +9 -0
  206. package/src/Components/context/index.ts +17 -0
  207. package/src/Components/hooks/index.ts +9 -0
  208. package/src/Components/hooks/useCallDuration.ts +34 -0
  209. package/src/Components/hooks/useCustomButtonUIConfig.ts +27 -0
  210. package/src/Components/hooks/useDeviceList.ts +53 -0
  211. package/src/Components/hooks/useGetSpeakers.ts +69 -0
  212. package/src/Components/hooks/useGetVolumeMap.ts +67 -0
  213. package/src/Components/hooks/useNetWorkStatus.ts +34 -0
  214. package/src/Components/hooks/useTranslate.ts +7 -0
  215. package/src/Components/hooks/useViewBackgroundConfig.ts +8 -0
  216. package/src/Components/style/common/mixin.scss +22 -0
  217. package/src/Components/style/common/var.scss +21 -0
  218. package/src/Components/style/index.scss +5 -0
  219. package/src/Components/style/theme/_dark.scss +56 -0
  220. package/src/Components/style/theme/_light.scss +56 -0
  221. package/src/Components/style/theme/_util.scss +79 -0
  222. package/src/Components/style/theme/color.scss +23 -0
  223. package/src/Components/util/classnames.ts +35 -0
  224. package/src/Components/util/index.ts +138 -0
  225. package/src/Components/util/uiDesign.ts +45 -0
  226. package/src/TUICallService/CallService/UIDesign.ts +174 -0
  227. package/src/TUICallService/CallService/bellContext.ts +88 -0
  228. package/src/TUICallService/CallService/chatCombine.ts +313 -0
  229. package/src/TUICallService/CallService/engineEventHandler.ts +404 -0
  230. package/src/TUICallService/CallService/index.ts +797 -0
  231. package/src/TUICallService/CallService/miniProgram.ts +65 -0
  232. package/src/TUICallService/CallService/utils.ts +281 -0
  233. package/src/TUICallService/TUIGlobal/tuiGlobal.ts +43 -0
  234. package/src/TUICallService/TUIStore/callStore.ts +93 -0
  235. package/src/TUICallService/TUIStore/tuiStore.ts +167 -0
  236. package/src/TUICallService/assets/phone_dialing.mp3 +0 -0
  237. package/src/TUICallService/assets/phone_ringing.mp3 +0 -0
  238. package/src/TUICallService/const/call.ts +157 -0
  239. package/src/TUICallService/const/error.ts +20 -0
  240. package/src/TUICallService/const/index.ts +103 -0
  241. package/src/TUICallService/const/log.ts +9 -0
  242. package/src/TUICallService/index.ts +37 -0
  243. package/src/TUICallService/interface/ICallService.ts +70 -0
  244. package/src/TUICallService/interface/ICallStore.ts +55 -0
  245. package/src/TUICallService/interface/ITUIGlobal.ts +36 -0
  246. package/src/TUICallService/interface/ITUIStore.ts +87 -0
  247. package/src/TUICallService/interface/index.ts +4 -0
  248. package/src/TUICallService/locales/en.ts +135 -0
  249. package/src/TUICallService/locales/index.ts +61 -0
  250. package/src/TUICallService/locales/ja_JP.ts +134 -0
  251. package/src/TUICallService/locales/zh-cn.ts +130 -0
  252. package/src/TUICallService/serve/callManager.ts +109 -0
  253. package/src/TUICallService/utils/common-utils.ts +269 -0
  254. package/src/TUICallService/utils/decorators/promise-retry.ts +51 -0
  255. package/src/TUICallService/utils/env.ts +51 -0
  256. package/src/TUICallService/utils/index.ts +32 -0
  257. package/src/TUICallService/utils/is-empty.ts +31 -0
  258. package/src/TUICallService/utils/retry.ts +88 -0
  259. package/src/TUICallService/utils/timer.ts +162 -0
  260. package/src/TUICallService/utils/validate/avoidRepeatedCall.ts +39 -0
  261. package/src/TUICallService/utils/validate/index.ts +7 -0
  262. package/src/TUICallService/utils/validate/validateConfig.ts +188 -0
  263. package/src/TUICallService/utils/validate/validateParams.ts +88 -0
  264. package/src/TUICallService/utils/validate/validateStatus.ts +26 -0
  265. package/src/image.d.ts +8 -0
  266. package/src/index.ts +63 -0
  267. package/src/style.d.ts +1 -0
  268. package/tuicall-uikit-react.es.js +13177 -0
  269. package/tuicall-uikit-react.umd.js +133 -0
  270. package/types/Components/TUICallKit/TUICallKit.d.ts +15 -0
  271. package/types/Components/TUICallKit/index.d.ts +2 -0
  272. package/types/Components/assets/permission/desktop/index.d.ts +5 -0
  273. package/types/Components/components/GroupCall/GroupCall.d.ts +1 -0
  274. package/types/Components/components/GroupCall/MediaContainer/AudioStream/AudioStream.d.ts +10 -0
  275. package/types/Components/components/GroupCall/MediaContainer/MediaContainer.d.ts +1 -0
  276. package/types/Components/components/GroupCall/MediaContainer/StreamLoading/StreamLoading.d.ts +7 -0
  277. package/types/Components/components/GroupCall/MediaContainer/index.d.ts +2 -0
  278. package/types/Components/components/GroupCall/Waiting/Waiting.d.ts +8 -0
  279. package/types/Components/components/SingleCall/MediaContainer/AudioStream/AudioStream.d.ts +11 -0
  280. package/types/Components/components/SingleCall/MediaContainer/MediaContainer.d.ts +1 -0
  281. package/types/Components/components/SingleCall/MediaContainer/hooks/useGetLargeViewName.d.ts +3 -0
  282. package/types/Components/components/SingleCall/MediaContainer/index.d.ts +2 -0
  283. package/types/Components/components/SingleCall/SingleCall.d.ts +3 -0
  284. package/types/Components/components/SingleCall/Waiting/Waiting.d.ts +9 -0
  285. package/types/Components/components/base/Avatar/Avatar.d.ts +12 -0
  286. package/types/Components/components/base/Avatar/index.d.ts +2 -0
  287. package/types/Components/components/base/Button/Button.d.ts +25 -0
  288. package/types/Components/components/base/Button/index.d.ts +2 -0
  289. package/types/Components/components/base/Drag/Drag.d.ts +14 -0
  290. package/types/Components/components/base/Drag/index.d.ts +2 -0
  291. package/types/Components/components/base/Grid/Col/Col.d.ts +14 -0
  292. package/types/Components/components/base/Grid/Col/index.d.ts +2 -0
  293. package/types/Components/components/base/Grid/Row/Row.d.ts +14 -0
  294. package/types/Components/components/base/Grid/Row/index.d.ts +3 -0
  295. package/types/Components/components/base/GridLayout/GridLayout.d.ts +11 -0
  296. package/types/Components/components/base/GridLayout/GridPlusItem/GridPlusItem.d.ts +14 -0
  297. package/types/Components/components/base/GridLayout/index.d.ts +3 -0
  298. package/types/Components/components/base/Icon/Icon.d.ts +9 -0
  299. package/types/Components/components/base/Loading/Circle/Cilrcle.d.ts +6 -0
  300. package/types/Components/components/base/Loading/Dot/Dot.d.ts +6 -0
  301. package/types/Components/components/base/Loading/Loading.d.ts +14 -0
  302. package/types/Components/components/base/Loading/index.d.ts +2 -0
  303. package/types/Components/components/base/Message/Message.d.ts +16 -0
  304. package/types/Components/components/base/Message/MessageIcon/Error.d.ts +1 -0
  305. package/types/Components/components/base/Message/MessageIcon/Info.d.ts +1 -0
  306. package/types/Components/components/base/Message/MessageIcon/Success.d.ts +1 -0
  307. package/types/Components/components/base/Message/MessageIcon/Warning.d.ts +1 -0
  308. package/types/Components/components/base/Message/MessagePlugin.d.ts +14 -0
  309. package/types/Components/components/base/Overlayer/Overlayer.d.ts +14 -0
  310. package/types/Components/components/base/Popup/Popup.d.ts +13 -0
  311. package/types/Components/components/base/Popup/hooks/useTrigger.d.ts +10 -0
  312. package/types/Components/components/base/Portal/Portal.d.ts +19 -0
  313. package/types/Components/components/base/Text/Text.d.ts +10 -0
  314. package/types/Components/components/base/Time/Time.d.ts +7 -0
  315. package/types/Components/components/base/ToggleWindow/ToggleWindow.d.ts +15 -0
  316. package/types/Components/components/base/ToggleWindow/ToggleWindowItem/ToggleWindowItem.d.ts +14 -0
  317. package/types/Components/components/base/ToggleWindow/index.d.ts +3 -0
  318. package/types/Components/components/base/common.d.ts +7 -0
  319. package/types/Components/components/base/hooks/useControlled.d.ts +8 -0
  320. package/types/Components/components/base/hooks/useDrag.d.ts +6 -0
  321. package/types/Components/components/base/hooks/useListenerEvent.d.ts +13 -0
  322. package/types/Components/components/base/hooks/useMutationObserver.d.ts +4 -0
  323. package/types/Components/components/base/hooks/useOnClickOutSide.d.ts +1 -0
  324. package/types/Components/components/base/util/index.d.ts +5 -0
  325. package/types/Components/components/common/ButtonPanel/ButtonPanel.d.ts +1 -0
  326. package/types/Components/components/common/ButtonPanel/ButtonPanelH5/ButtonPanelH5.d.ts +8 -0
  327. package/types/Components/components/common/ButtonPanel/ButtonPanelPC/ButtonPanelPC.d.ts +6 -0
  328. package/types/Components/components/common/ButtonPanel/button/Accept/Accept.d.ts +5 -0
  329. package/types/Components/components/common/ButtonPanel/button/Accept/index.d.ts +2 -0
  330. package/types/Components/components/common/ButtonPanel/button/BackgroundBlur/BackgroundBlur.d.ts +1 -0
  331. package/types/Components/components/common/ButtonPanel/button/BackgroundBlur/index.d.ts +2 -0
  332. package/types/Components/components/common/ButtonPanel/button/Camera.d.ts +5 -0
  333. package/types/Components/components/common/ButtonPanel/button/FullScreen/FullScreen.d.ts +5 -0
  334. package/types/Components/components/common/ButtonPanel/button/FullScreen/index.d.ts +2 -0
  335. package/types/Components/components/common/ButtonPanel/button/Hangup/Hangup.d.ts +5 -0
  336. package/types/Components/components/common/ButtonPanel/button/Hangup/index.d.ts +2 -0
  337. package/types/Components/components/common/ButtonPanel/button/Microphone.d.ts +5 -0
  338. package/types/Components/components/common/ButtonPanel/button/Minimize/Minimize.d.ts +1 -0
  339. package/types/Components/components/common/ButtonPanel/button/Minimize/index.d.ts +2 -0
  340. package/types/Components/components/common/ButtonPanel/button/Reject/Reject.d.ts +5 -0
  341. package/types/Components/components/common/ButtonPanel/button/Reject/index.d.ts +2 -0
  342. package/types/Components/components/common/ButtonPanel/button/Speaker.d.ts +5 -0
  343. package/types/Components/components/common/ButtonPanel/button/SwitchAudioCall.d.ts +1 -0
  344. package/types/Components/components/common/ButtonPanel/button/SwitchCamera.d.ts +1 -0
  345. package/types/Components/components/common/ButtonPanel/config.d.ts +254 -0
  346. package/types/Components/components/common/ButtonPanel/index.d.ts +2 -0
  347. package/types/Components/components/common/CallMessage/CallMessage.d.ts +10 -0
  348. package/types/Components/components/common/CallMessage/CallMessageC2C/CallMessageC2C.d.ts +2 -0
  349. package/types/Components/components/common/CallMessage/CallMessageGroup/CallMessageGroup.d.ts +2 -0
  350. package/types/Components/components/common/CallMessage/index.d.ts +2 -0
  351. package/types/Components/components/common/DeviceSelector/DeviceSelector.d.ts +7 -0
  352. package/types/Components/components/common/FloatingWindow/FloatingWindow.d.ts +10 -0
  353. package/types/Components/components/common/FloatingWindow/FloatingWindowGroupCall/FloatingWindowGroupCall.d.ts +9 -0
  354. package/types/Components/components/common/FloatingWindow/FloatingWindowSingleCall/FloatingWindowSingleCall.d.ts +10 -0
  355. package/types/Components/components/common/FloatingWindow/index.d.ts +2 -0
  356. package/types/Components/components/common/MicrophoneVolumn/MicrophoneVolumn.d.ts +8 -0
  357. package/types/Components/components/common/OverlayStream/OverlayStream.d.ts +28 -0
  358. package/types/Components/components/common/Player/Player.d.ts +15 -0
  359. package/types/Components/components/common/Pusher/Pusher.d.ts +13 -0
  360. package/types/Components/components/common/StreamInfo/StreamInfo.d.ts +1 -0
  361. package/types/Components/components/common/StreamInfo/StreamInfoH5/StreamInfoH5.d.ts +10 -0
  362. package/types/Components/components/common/StreamInfo/StreamInfoPC/StreamInfoPC.d.ts +9 -0
  363. package/types/Components/components/common/StreamInfo/index.d.ts +2 -0
  364. package/types/Components/components/common/Tip/Tip.d.ts +7 -0
  365. package/types/Components/components/common/TopBar/TopBar.d.ts +1 -0
  366. package/types/Components/components/common/TopBar/h5/TopBarH5.d.ts +5 -0
  367. package/types/Components/components/common/TopBar/pc/TopBarPC.d.ts +5 -0
  368. package/types/Components/const/common.d.ts +11 -0
  369. package/types/Components/context/CallUserInfoContext.d.ts +17 -0
  370. package/types/Components/context/CallerUserInfoContext.d.ts +7 -0
  371. package/types/Components/context/CustomUIConfigContext.d.ts +3 -0
  372. package/types/Components/context/FocusItemContext.d.ts +8 -0
  373. package/types/Components/context/IsClickableContext.d.ts +2 -0
  374. package/types/Components/context/TranslateContext.d.ts +4 -0
  375. package/types/Components/context/UserInfoContext.d.ts +6 -0
  376. package/types/Components/context/index.d.ts +8 -0
  377. package/types/Components/hooks/index.d.ts +4 -0
  378. package/types/Components/hooks/useCallDuration.d.ts +1 -0
  379. package/types/Components/hooks/useCustomButtonUIConfig.d.ts +1 -0
  380. package/types/Components/hooks/useDeviceList.d.ts +8 -0
  381. package/types/Components/hooks/useGetSpeakers.d.ts +1 -0
  382. package/types/Components/hooks/useGetVolumeMap.d.ts +3 -0
  383. package/types/Components/hooks/useNetWorkStatus.d.ts +1 -0
  384. package/types/Components/hooks/useTranslate.d.ts +3 -0
  385. package/types/Components/hooks/useViewBackgroundConfig.d.ts +1 -0
  386. package/types/Components/util/classnames.d.ts +1 -0
  387. package/types/Components/util/index.d.ts +15 -0
  388. package/types/Components/util/uiDesign.d.ts +2 -0
  389. package/types/TUICallService/CallService/UIDesign.d.ts +28 -0
  390. package/types/TUICallService/CallService/bellContext.d.ts +19 -0
  391. package/types/TUICallService/CallService/chatCombine.d.ts +50 -0
  392. package/types/TUICallService/CallService/engineEventHandler.d.ts +35 -0
  393. package/types/TUICallService/CallService/index.d.ts +98 -0
  394. package/types/TUICallService/CallService/miniProgram.d.ts +7 -0
  395. package/types/TUICallService/CallService/utils.d.ts +42 -0
  396. package/types/TUICallService/TUIGlobal/tuiGlobal.d.ts +21 -0
  397. package/types/TUICallService/TUIStore/callStore.d.ts +10 -0
  398. package/types/TUICallService/TUIStore/tuiStore.d.ts +57 -0
  399. package/types/TUICallService/const/call.d.ts +141 -0
  400. package/types/TUICallService/const/error.d.ts +2 -0
  401. package/types/TUICallService/const/index.d.ts +27 -0
  402. package/types/TUICallService/const/log.d.ts +7 -0
  403. package/types/TUICallService/index.d.ts +5 -0
  404. package/types/TUICallService/interface/ICallService.d.ts +69 -0
  405. package/types/TUICallService/interface/ICallStore.d.ts +47 -0
  406. package/types/TUICallService/interface/ITUIGlobal.d.ts +36 -0
  407. package/types/TUICallService/interface/ITUIStore.d.ts +83 -0
  408. package/types/TUICallService/interface/index.d.ts +4 -0
  409. package/types/TUICallService/locales/en.d.ts +128 -0
  410. package/types/TUICallService/locales/index.d.ts +10 -0
  411. package/types/TUICallService/locales/ja_JP.d.ts +127 -0
  412. package/types/TUICallService/locales/zh-cn.d.ts +123 -0
  413. package/types/TUICallService/serve/callManager.d.ts +11 -0
  414. package/types/TUICallService/utils/common-utils.d.ts +62 -0
  415. package/types/TUICallService/utils/decorators/promise-retry.d.ts +32 -0
  416. package/types/TUICallService/utils/env.d.ts +10 -0
  417. package/types/TUICallService/utils/index.d.ts +2 -0
  418. package/types/TUICallService/utils/is-empty.d.ts +2 -0
  419. package/types/TUICallService/utils/retry.d.ts +36 -0
  420. package/types/TUICallService/utils/timer.d.ts +63 -0
  421. package/types/TUICallService/utils/validate/avoidRepeatedCall.d.ts +10 -0
  422. package/types/TUICallService/utils/validate/index.d.ts +2 -0
  423. package/types/TUICallService/utils/validate/validateConfig.d.ts +173 -0
  424. package/types/TUICallService/utils/validate/validateParams.d.ts +1 -0
  425. package/types/TUICallService/utils/validate/validateStatus.d.ts +5 -0
  426. package/types/index.d.ts +11 -0
@@ -0,0 +1,65 @@
1
+ import { CallMediaType, CallStatus } from '../const/index';
2
+
3
+ export function initialUI() {
4
+ // 收起键盘
5
+ // @ts-ignore
6
+ wx.hideKeyboard && wx.hideKeyboard({
7
+ complete: () => {},
8
+ });
9
+ };
10
+ // 检测运行时环境, 当是微信开发者工具时, 提示用户需要手机调试
11
+ export function checkRunPlatform() {
12
+ // @ts-ignore
13
+ const systemInfo = wx.getSystemInfoSync();
14
+ if (systemInfo.platform === 'devtools') {
15
+ // 当前运行在微信开发者工具里
16
+ // @ts-ignore
17
+ wx.showModal({
18
+ icon: 'none',
19
+ title: '运行环境提醒',
20
+ content: '微信开发者工具不支持原生推拉流组件(即 <live-pusher> 和 <live-player> 标签),请使用真机调试或者扫码预览。',
21
+ showCancel: false,
22
+ });
23
+ }
24
+ };
25
+ export function initAndCheckRunEnv() {
26
+ initialUI(); // miniProgram 收起键盘, 隐藏 tabBar
27
+ checkRunPlatform(); // miniProgram 检测运行时环境
28
+ }
29
+ export async function beforeCall(type: CallMediaType, that: any) {
30
+ try {
31
+ initAndCheckRunEnv();
32
+ // 检查设备权限
33
+ const deviceMap = {
34
+ microphone: true,
35
+ camera: type === CallMediaType.VIDEO,
36
+ };
37
+ const hasDevicePermission = await that._tuiCallEngine.deviceCheck(deviceMap); // miniProgram 检查设备权限
38
+ return hasDevicePermission ? CallStatus.CALLING : CallStatus.IDLE;
39
+ } catch (error) {
40
+ console.debug(error);
41
+ return CallStatus.IDLE;
42
+ }
43
+ }
44
+ // 套餐问题提示, 小程序最低需要群组通话版, 1v1 通话版本使用 TRTC 就会报错
45
+ export function handlePackageError(error) {
46
+ if (error?.code === -1002) {
47
+ // @ts-ignore
48
+ wx.showModal({
49
+ icon: 'none',
50
+ title: 'error',
51
+ content: error?.message || '',
52
+ showCancel: false,
53
+ });
54
+ }
55
+ }
56
+
57
+ export function handleNoPusherCapabilityError(){
58
+ // @ts-ignore
59
+ wx.showModal({
60
+ icon: 'none',
61
+ title: '权限提示',
62
+ content: '当前小程序 appid 不具备 <live-pusher> 和 <live-player> 的使用权限,您将无法正常使用实时通话能力,请使用企业小程序账号申请权限后再进行开发体验',
63
+ showCancel: false,
64
+ });
65
+ }
@@ -0,0 +1,281 @@
1
+ import { NAME, StoreName, CallStatus, StatusChange, CallMediaType, ROOM_ID_TYPE } from '../const/index';
2
+ import { handleNoDevicePermissionError } from '../utils/common-utils';
3
+ import { IUserInfo } from '../interface/ICallService';
4
+ import { ITUIStore } from '../interface/ITUIStore';
5
+ import { CallTips, t } from '../locales/index';
6
+ import TuiStore from '../TUIStore/tuiStore';
7
+ // @ts-ignore
8
+ const TUIStore: ITUIStore = TuiStore.getInstance();
9
+
10
+ // 设置默认的 UserInfo 信息
11
+ export function setDefaultUserInfo(userId: string, domId?: string): IUserInfo {
12
+ const userInfo: IUserInfo = {
13
+ userId,
14
+ nick: '',
15
+ avatar: '',
16
+ remark: '',
17
+ displayUserInfo: '',
18
+ isAudioAvailable: false,
19
+ isVideoAvailable: false,
20
+ isEnter: false,
21
+ domId: domId || userId,
22
+ };
23
+ return domId ? userInfo : { ...userInfo, isEnter: false }; // localUserInfo 没有 isEnter, remoteUserInfoList 有 isEnter
24
+ }
25
+ // 获取个人用户信息
26
+ export async function getMyProfile(myselfUserId: string, tim: any): Promise<IUserInfo> {
27
+ let localUserInfo: IUserInfo = setDefaultUserInfo(myselfUserId, NAME.LOCAL_VIDEO);
28
+ try {
29
+ if (!tim) return localUserInfo;
30
+ const res = await tim.getMyProfile();
31
+ const currentLocalUserInfo = TUIStore?.getData(StoreName.CALL, NAME.LOCAL_USER_INFO); // localUserInfo may have been updated
32
+ if (res?.code === 0) {
33
+ localUserInfo = {
34
+ ...localUserInfo,
35
+ ...currentLocalUserInfo,
36
+ userId: res?.data?.userID,
37
+ nick: res?.data?.nick,
38
+ avatar: res?.data?.avatar,
39
+ displayUserInfo: res?.data?.nick || res?.data?.userID,
40
+ };
41
+ }
42
+ return localUserInfo;
43
+ } catch (error) {
44
+ console.error(`${NAME.PREFIX}getMyProfile failed, error: ${error}.`);
45
+ return localUserInfo;
46
+ }
47
+ }
48
+ // 获取远端用户列表信息
49
+ export async function getRemoteUserProfile(userIdList: Array<string>, tim: any): Promise<any> {
50
+ let remoteUserInfoList: IUserInfo[] = userIdList.map((userId: string) => setDefaultUserInfo(userId));
51
+ try {
52
+ if (!tim) return remoteUserInfoList;
53
+
54
+ if (tim?.getFriendProfile) {
55
+ const res = await tim.getFriendProfile({ userIDList: userIdList });
56
+ if (res.code === 0) {
57
+ const { friendList = [], failureUserIDList = [] } = res.data;
58
+ let unFriendList: IUserInfo[] = failureUserIDList.map((obj: any) => obj.userID);
59
+ if (failureUserIDList.length > 0) {
60
+ const res = await tim.getUserProfile({ userIDList: failureUserIDList.map((obj: any) => obj.userID) });
61
+ if (res?.code === 0) {
62
+ unFriendList = res?.data || [];
63
+ }
64
+ }
65
+ const currentRemoteUserInfoList = TUIStore?.getData(StoreName.CALL, NAME.REMOTE_USER_INFO_LIST); // remoteUserInfoList may have been updated
66
+ const tempFriendIdList: string[] = friendList.map((obj: any) => obj.userID);
67
+ const tempUnFriendIdList: string[] = unFriendList.map((obj: any) => obj.userID);
68
+ remoteUserInfoList = userIdList.map((userId: string) => {
69
+ const defaultUserInfo: IUserInfo = setDefaultUserInfo(userId);
70
+ const friendListIndex: number = tempFriendIdList.indexOf(userId);
71
+ const unFriendListIndex: number = tempUnFriendIdList.indexOf(userId);
72
+ let remark = '';
73
+ let nick = '';
74
+ let displayUserInfo = '' ;
75
+ let avatar = '';
76
+ if (friendListIndex !== -1) {
77
+ remark = friendList[friendListIndex]?.remark || '';
78
+ nick = friendList[friendListIndex]?.profile?.nick || '';
79
+ displayUserInfo = remark || nick || defaultUserInfo.userId || '';
80
+ avatar = friendList[friendListIndex]?.profile?.avatar || '';
81
+ }
82
+ if (unFriendListIndex !== -1) {
83
+ nick = unFriendList[unFriendListIndex]?.nick || '';
84
+ displayUserInfo = nick || defaultUserInfo.userId || '';
85
+ avatar = unFriendList[unFriendListIndex]?.avatar || '';
86
+ }
87
+ const userInfo = currentRemoteUserInfoList.find(subObj => subObj.userId === userId) || {};
88
+ return { ...defaultUserInfo, ...userInfo, remark, nick, displayUserInfo, avatar };
89
+ });
90
+ }
91
+ return remoteUserInfoList;
92
+ } else {
93
+ const res = await tim.getUserProfile({ userIDList: userIdList });
94
+ const currentRemoteUserInfoList = TUIStore?.getData(StoreName.CALL, NAME.REMOTE_USER_INFO_LIST); // remoteUserInfoList may have been updated
95
+
96
+ remoteUserInfoList = userIdList.map((userId: string) => {
97
+ const defaultUserInfo: IUserInfo = setDefaultUserInfo(userId);
98
+ const userInfo = currentRemoteUserInfoList.find(subObj => subObj.userId === userId) || {};
99
+ const userData = (res.data || []).find(obj => obj.userID === userId) || {};
100
+
101
+ return {
102
+ ...defaultUserInfo,
103
+ ...userInfo,
104
+ nick: userData?.nick || '',
105
+ displayUserInfo: userData?.nick || userId,
106
+ avatar: userData?.avatar || '',
107
+ };
108
+ });
109
+ return remoteUserInfoList;
110
+ }
111
+ } catch (error) {
112
+ console.error(`${NAME.PREFIX}getRemoteUserProfile failed, error: ${error}.`);
113
+ return remoteUserInfoList;
114
+ }
115
+ }
116
+ // 生成弹框提示文案
117
+ export function generateText(key: string, prefix?: string, suffix?: string): string {
118
+ const isGroup = TUIStore.getData(StoreName.CALL, NAME.IS_GROUP);
119
+ let callTips = `${t(key)}`;
120
+ if (isGroup) {
121
+ callTips = prefix ? `${prefix} ${callTips}` : callTips;
122
+ callTips = suffix ? `${callTips} ${suffix}` : callTips;
123
+ }
124
+ return callTips;
125
+ }
126
+ // 生成 statusChange 抛出的字符串
127
+ export function generateStatusChangeText(): string {
128
+ const callStatus = TUIStore.getData(StoreName.CALL, NAME.CALL_STATUS);
129
+ if (callStatus === CallStatus.IDLE) {
130
+ return StatusChange.IDLE;
131
+ }
132
+ const isGroup = TUIStore.getData(StoreName.CALL, NAME.IS_GROUP);
133
+ if (callStatus === CallStatus.CALLING) {
134
+ return isGroup ? StatusChange.DIALING_GROUP : StatusChange.DIALING_C2C;
135
+ }
136
+ const callMediaType = TUIStore.getData(StoreName.CALL, NAME.CALL_MEDIA_TYPE);
137
+ if (isGroup) {
138
+ return callMediaType === CallMediaType.AUDIO ? StatusChange.CALLING_GROUP_AUDIO : StatusChange.CALLING_GROUP_VIDEO;
139
+ }
140
+ return callMediaType === CallMediaType.AUDIO ? StatusChange.CALLING_C2C_AUDIO : StatusChange.CALLING_C2C_VIDEO;
141
+ }
142
+ // 获取群组[offset, count + offset]区间成员
143
+ export async function getGroupMemberList(groupID: string, tim: any, count, offset) {
144
+ let groupMemberList = [];
145
+ try {
146
+ const res = await tim.getGroupMemberList({ groupID, count, offset });
147
+ if (res.code === 0) {
148
+ return res.data.memberList || groupMemberList;
149
+ }
150
+ } catch(error) {
151
+ console.error(`${NAME.PREFIX}getGroupMember failed, error: ${error}.`);
152
+ return groupMemberList;
153
+ }
154
+ }
155
+ // 获取 IM 群信息
156
+ export async function getGroupProfile(groupID: string, tim: any): Promise<any> {
157
+ let groupProfile = {};
158
+ try {
159
+ const res = await tim.getGroupProfile({ groupID });
160
+ return res.data.group || groupProfile;
161
+ } catch(error) {
162
+ console.warn(`${NAME.PREFIX}getGroupProfile failed, error: ${error}.`);
163
+ return groupProfile;
164
+ }
165
+ }
166
+ /**
167
+ * update roomId and roomIdType
168
+ * @param {number} roomId number roomId
169
+ * @param {string} strRoomId string roomId
170
+ */
171
+ export function updateRoomIdAndRoomIdType(roomId, strRoomId) {
172
+ if (roomId === 0 && strRoomId) { // use strRoomID
173
+ TUIStore.update(StoreName.CALL, NAME.ROOM_ID, strRoomId);
174
+ TUIStore.update(StoreName.CALL, NAME.ROOM_ID_TYPE, ROOM_ID_TYPE.STRING_ROOM_ID);
175
+ } else {
176
+ TUIStore.update(StoreName.CALL, NAME.ROOM_ID, roomId);
177
+ TUIStore.update(StoreName.CALL, NAME.ROOM_ID_TYPE, ROOM_ID_TYPE.NUMBER_ROOM_ID);
178
+ }
179
+ }
180
+ /**
181
+ * web and miniProgram call engine throw event data structure are different
182
+ * @param {any} event call engine throw out data
183
+ * @returns {any} data
184
+ */
185
+ export function analyzeEventData(event: any): any {
186
+ return event || {};
187
+ }
188
+ /**
189
+ * delete user from remoteUserInfoList
190
+ * @param {string[]} userIdList to be deleted userIdList
191
+ * @param {ITUIStore} TUIStore TUIStore instance
192
+ */
193
+ export function deleteRemoteUser(userIdList: string[]): void {
194
+ if (userIdList.length === 0) return;
195
+ let remoteUserInfoList = TUIStore.getData(StoreName.CALL, NAME.REMOTE_USER_INFO_LIST);
196
+ userIdList.forEach((userId) => {
197
+ remoteUserInfoList = remoteUserInfoList.filter((obj: IUserInfo) => obj.userId !== userId);
198
+ });
199
+ TUIStore.update(StoreName.CALL, NAME.REMOTE_USER_INFO_LIST, remoteUserInfoList);
200
+ TUIStore.update(StoreName.CALL, NAME.REMOTE_USER_INFO_EXCLUDE_VOLUMN_LIST, remoteUserInfoList);
201
+ }
202
+ export function updateDeviceList(tuiCallEngine) {
203
+ tuiCallEngine?.getDeviceList('speaker').then((result)=>{
204
+ const deviceList = TUIStore.getData(StoreName.CALL, NAME.DEVICE_LIST);
205
+ const currentSpeaker = result?.[0] || {};
206
+ TUIStore.update(
207
+ StoreName.CALL,
208
+ NAME.DEVICE_LIST,
209
+ { ...deviceList, speakerList: result, currentSpeaker },
210
+ );
211
+ }).catch(error =>{
212
+ console.error(`${NAME.PREFIX}updateSpeakerList failed, error: ${JSON.stringify(error)}.`);
213
+ });
214
+ const callMediaType = TUIStore.getData(StoreName.CALL, NAME.CALL_MEDIA_TYPE);
215
+ if (callMediaType === CallMediaType.VIDEO) {
216
+ tuiCallEngine?.getDeviceList('camera').then((result) => {
217
+ const deviceList = TUIStore.getData(StoreName.CALL, NAME.DEVICE_LIST);
218
+ const currentCamera = result?.[0] || {};
219
+ TUIStore.update(
220
+ StoreName.CALL,
221
+ NAME.DEVICE_LIST,
222
+ { ...deviceList, cameraList: result, currentCamera },
223
+ );
224
+ }).catch(error => {
225
+ console.error(`${NAME.PREFIX}updateCameraList failed, error: ${error}.`);
226
+ });
227
+ }
228
+ tuiCallEngine?.getDeviceList('microphones').then((result) => {
229
+ const deviceList = TUIStore.getData(StoreName.CALL, NAME.DEVICE_LIST);
230
+ const currentMicrophone = result?.[0] || {};
231
+ TUIStore.update(
232
+ StoreName.CALL,
233
+ NAME.DEVICE_LIST,
234
+ { ...deviceList, microphoneList: result, currentMicrophone },
235
+ );
236
+ }).catch(error => {
237
+ console.error(`${NAME.PREFIX}updateMicrophoneList failed, error: ${error}.`);
238
+ });
239
+ }
240
+ /**
241
+ * update the no device permission toast
242
+ * @param {any} error error
243
+ * @param {CallMediaType} type call midia type
244
+ * @param {any} tuiCallEngine TUICallEngine instance
245
+ */
246
+ export function noDevicePermissionToast(error, type: CallMediaType, tuiCallEngine: any) {
247
+ let toastInfoKey = '';
248
+ if (handleNoDevicePermissionError(error)) {
249
+ if (type === CallMediaType.AUDIO) {
250
+ toastInfoKey = CallTips.NO_MICROPHONE_DEVICE_PERMISSION;
251
+ }
252
+ if (type === CallMediaType.VIDEO) {
253
+ toastInfoKey = CallTips.NO_CAMERA_DEVICE_PERMISSION;
254
+ }
255
+
256
+ const permission = tuiCallEngine?.getDevicePermission();
257
+ if (!permission?.audio) {
258
+ TUIStore.update(StoreName.CALL, NAME.SHOW_PERMISSION_TIP, true);
259
+ }
260
+
261
+ toastInfoKey && TUIStore.update(StoreName.CALL, NAME.TOAST_INFO, { content: toastInfoKey, type: NAME.ERROR });
262
+ console.error(`${NAME.PREFIX}call failed, error: ${error.message}.`);
263
+ }
264
+ }
265
+ /**
266
+ * set localUserInfo audio/video available
267
+ * @param {boolean} isAvailable is available
268
+ * @param {string} type callMediaType 'audio' | 'video'
269
+ * @param {ITUIStore} TUIStore TUIStore instance
270
+ */
271
+ export function setLocalUserInfoAudioVideoAvailable(isAvailable: boolean, type: string) {
272
+ let localUserInfo = TUIStore.getData(StoreName.CALL, NAME.LOCAL_USER_INFO);
273
+ if (type === NAME.AUDIO) {
274
+ localUserInfo = { ...localUserInfo, isAudioAvailable: isAvailable };
275
+ }
276
+ if (type === NAME.VIDEO) {
277
+ localUserInfo = { ...localUserInfo, isVideoAvailable: isAvailable };
278
+ }
279
+ TUIStore.update(StoreName.CALL, NAME.LOCAL_USER_INFO, localUserInfo);
280
+ TUIStore.update(StoreName.CALL, NAME.LOCAL_USER_INFO_EXCLUDE_VOLUMN, localUserInfo);
281
+ }
@@ -0,0 +1,43 @@
1
+ import { APP_NAMESPACE, IS_PC, IS_H5, IN_WX_MINI_APP, IN_UNI_NATIVE_APP, IN_UNI_APP, IS_MAC, IS_WIN } from '../utils/env';
2
+ import { ITUIGlobal } from '../interface/ITUIGlobal';
3
+
4
+ export default class TUIGlobal implements ITUIGlobal {
5
+ static instance: TUIGlobal;
6
+ public global: any = APP_NAMESPACE;
7
+ public isPC: boolean = false;
8
+ public isH5: boolean = false;
9
+ public isWeChat: boolean = false;
10
+ public isApp: boolean = false;
11
+ public isUniPlatform: boolean = false;
12
+ public isOfficial: boolean = false;
13
+ public isWIN: boolean = false;
14
+ public isMAC: boolean = false;
15
+ constructor() {
16
+ this.initEnv();
17
+ }
18
+
19
+ /**
20
+ * 获取 TUIGlobal 实例
21
+ * @returns {TUIGlobal}
22
+ */
23
+ static getInstance() {
24
+ if (!TUIGlobal.instance) {
25
+ TUIGlobal.instance = new TUIGlobal();
26
+ }
27
+ return TUIGlobal.instance;
28
+ }
29
+
30
+ initEnv() {
31
+ this.isPC = IS_PC;
32
+ this.isH5 = IS_H5;
33
+ this.isWeChat = IN_WX_MINI_APP;
34
+ this.isApp = IN_UNI_NATIVE_APP && !IN_WX_MINI_APP; // uniApp 打包小程序时 IN_UNI_NATIVE_APP 为 true,所以此处需要增加条件
35
+ this.isUniPlatform = IN_UNI_APP;
36
+ this.isWIN = IS_WIN;
37
+ this.isMAC = IS_MAC;
38
+ }
39
+
40
+ initOfficial(SDKAppID: number) {
41
+ this.isOfficial = (SDKAppID === 1400187352 || SDKAppID === 1400188366);
42
+ }
43
+ }
@@ -0,0 +1,93 @@
1
+ import { CallStatus, CallRole, CallMediaType, VideoDisplayMode, VideoResolution, CameraPosition, LayoutMode, NAME } from '../const/index';
2
+ import { ICallStore } from '../interface/ICallStore';
3
+ import { t } from '../locales/index';
4
+ import { getLanguage } from '../utils/common-utils';
5
+ import { deepClone } from "../utils/index";
6
+
7
+ export default class CallStore {
8
+ public defaultStore: ICallStore = {
9
+ callStatus: CallStatus.IDLE,
10
+ callRole: CallRole.UNKNOWN,
11
+ callMediaType: CallMediaType.UNKNOWN,
12
+ localUserInfo: { userId: '' },
13
+ localUserInfoExcludeVolume: { userId: '' },
14
+ remoteUserInfoList: [],
15
+ remoteUserInfoExcludeVolumeList: [],
16
+ callerUserInfo: { userId: '' },
17
+ isGroup: false,
18
+ callDuration: '00:00:00', // 通话时长
19
+ callTips: '', // 通话提示的信息. 例如: '等待谁接听', 'xxx 拒绝通话', 'xxx 挂断通话'
20
+ toastInfo: { text: '' }, // 远端用户挂断、拒绝、超时、忙线等的 toast 提示信息
21
+ isMinimized: false, // 用来记录当前是否悬浮窗模式
22
+ enableFloatWindow: false, // 开启/关闭悬浮窗功能,设置为false,通话界面左上角的悬浮窗按钮会隐藏
23
+ bigScreenUserId: '', // 当前大屏幕显示的 userID 用户
24
+ language: getLanguage(), // en, zh-cn
25
+ isClickable: false, // 是否可点击, 用于按钮增加 loading 效果,不可点击
26
+ deviceList: { cameraList: [], microphoneList: [], currentCamera: {}, currentMicrophone: {} },
27
+ showPermissionTip: false,
28
+ netWorkQualityList: [], // 显示网络状态差的提示
29
+ isMuteSpeaker: false,
30
+ callID: '', // callEngine 3.1 support
31
+ groupID: '',
32
+ roomID: 0,
33
+ roomIdType: 0,
34
+ cameraPosition: CameraPosition.FRONT, // 前置或后置,值为front, back
35
+ groupCallMembers: [], // chat 群会话在的通话中的成员
36
+ // TUICallKit 组件上的属性
37
+ displayMode: VideoDisplayMode.COVER, // 设置预览远端的画面显示模式
38
+ videoResolution: VideoResolution.RESOLUTION_720P,
39
+ showSelectUser: false,
40
+ // 小程序相关属性
41
+ pusher: {},
42
+ player: [],
43
+ isEarPhone: false, // 是否是听筒, 默认: false
44
+ pusherId: NAME.INITIAL_PUSHER, // 重新渲染 live-Pusher 的标识位
45
+ // 是否开启虚拟背景, 目前仅 web 支持
46
+ isShowEnableVirtualBackground: false, // 是否显示虚拟背景图标, 默认: false
47
+ enableVirtualBackground: false, // 是否开启虚拟背景, 默认: false
48
+ // customUIConfig
49
+ customUIConfig: {
50
+ button: {},
51
+ viewBackground: {},
52
+ layoutMode: LayoutMode.RemoteInLargeView,
53
+ },
54
+ // translate function
55
+ translate: t,
56
+ isForceUseV2API: false,
57
+ };
58
+ public store: ICallStore = deepClone(this.defaultStore);
59
+ public prevStore: ICallStore = deepClone(this.defaultStore);
60
+
61
+ public update(key: keyof ICallStore, data: any): void {
62
+ switch (key) {
63
+ case NAME.CALL_TIPS:
64
+ const preData = this.getData(key);
65
+ (this.prevStore[key] as any) = preData;
66
+ default:
67
+ // resolve "Type 'any' is not assignable to type 'never'.ts", ref: https://github.com/microsoft/TypeScript/issues/31663
68
+ (this.store[key] as any) = data as any;
69
+ }
70
+ }
71
+
72
+ public getPrevData(key: string | undefined): any {
73
+ if (!key) return this.prevStore;
74
+ return this.prevStore[key as keyof ICallStore];
75
+ }
76
+
77
+ public getData(key: string | undefined): any {
78
+ if (!key) return this.store;
79
+ return this.store[key as keyof ICallStore];
80
+ }
81
+ // reset call store
82
+ public reset(keyList: Array<string> = []) {
83
+ if (keyList.length === 0) {
84
+ keyList = Object.keys(this.store);
85
+ }
86
+ const resetToDefault = keyList.reduce((acc, key) => ({ ...acc, [key]: this.defaultStore[key as keyof ICallStore] }), {});
87
+ this.store = {
88
+ ...this.defaultStore,
89
+ ...this.store,
90
+ ...resetToDefault,
91
+ };
92
+ }
93
+ }
@@ -0,0 +1,167 @@
1
+ import { ITUIStore, IOptions, Task } from '../interface/ITUIStore';
2
+ import { StoreName, NAME } from '../const/index';
3
+ import CallStore from './callStore';
4
+ import { isString, isNumber, isBoolean } from '../utils/common-utils';
5
+
6
+ export default class TUIStore implements ITUIStore {
7
+ static instance: TUIStore;
8
+ public task: Task;
9
+ private storeMap: Partial<Record<StoreName, any>>;
10
+ private timerId: number = -1;
11
+ constructor() {
12
+ this.storeMap = {
13
+ [StoreName.CALL]: new CallStore(),
14
+ };
15
+ // todo 此处后续优化结构后调整
16
+ this.task = {} as Task; // 保存监听回调列表
17
+ }
18
+
19
+ /**
20
+ * 获取 TUIStore 实例
21
+ * @returns {TUIStore}
22
+ */
23
+ static getInstance() {
24
+ if (!TUIStore.instance) {
25
+ TUIStore.instance = new TUIStore();
26
+ }
27
+ return TUIStore.instance;
28
+ }
29
+
30
+ /**
31
+ * UI 组件注册监听回调
32
+ * @param {StoreName} storeName store 名称
33
+ * @param {IOptions} options 监听信息
34
+ * @param {Object} params 扩展参数
35
+ * @param {String} params.notifyRangeWhenWatch 注册时监听时的通知范围, 'all' - 通知所有注册该 key 的监听; 'myself' - 通知本次注册该 key 的监听; 默认不通知
36
+ */
37
+ watch(storeName: StoreName, options: IOptions, params?: any) {
38
+ if (!this.task[storeName]) {
39
+ this.task[storeName] = {};
40
+ }
41
+ const watcher = this.task[storeName];
42
+ Object.keys(options).forEach((key) => {
43
+ const callback = options[key];
44
+ if (!watcher[key]) {
45
+ watcher[key] = new Map();
46
+ }
47
+ watcher[key].set(callback, 1);
48
+ const { notifyRangeWhenWatch } = params || {};
49
+ // 注册监听后, 通知所有注册该 key 的监听,使用 'all' 时要特别注意是否对其他地方的监听产生影响
50
+ if (notifyRangeWhenWatch === NAME.ALL) {
51
+ this.notify(storeName, key);
52
+ }
53
+ // 注册监听后, 仅通知自己本次监听该 key 的数据
54
+ if (notifyRangeWhenWatch === NAME.MYSELF) {
55
+ const data = this.getData(storeName, key);
56
+ callback.call(this, data);
57
+ }
58
+ });
59
+ }
60
+
61
+ /**
62
+ * UI 取消组件监听回调
63
+ * @param {StoreName} storeName store 名称
64
+ * @param {IOptions} options 监听信息,包含需要取消的回掉等
65
+ */
66
+ unwatch(storeName: StoreName, options: IOptions) {
67
+ // todo 该接口暂未支持,unwatch掉同一类,如仅传入store注销掉该store下的所有callback,同样options仅传入key注销掉该key下的所有callback
68
+ // options的callback function为必填参数,后续修改
69
+ if (!this.task[storeName]) {
70
+ return;
71
+ };
72
+ // if (isString(options)) {
73
+ // // 移除所有的监听
74
+ // if (options === '*') {
75
+ // const watcher = this.task[storeName];
76
+ // Object.keys(watcher).forEach(key => {
77
+ // watcher[key].clear();
78
+ // });
79
+ // } else {
80
+ // console.warn(`${NAME.PREFIX}unwatch warning: options is ${options}`);
81
+ // }
82
+ // return;
83
+ // }
84
+ const watcher = this.task[storeName];
85
+ Object.keys(options).forEach((key: string) => {
86
+ watcher[key].delete(options[key]);
87
+ });
88
+ }
89
+
90
+ /**
91
+ * 通用 store 数据更新,messageList 的变更需要单独处理
92
+ * @param {StoreName} storeName store 名称
93
+ * @param {string} key 变更的 key
94
+ * @param {unknown} data 变更的数据
95
+ */
96
+ update(storeName: StoreName, key: string, data: unknown) {
97
+ // 基本数据类型时, 如果相等, 就不进行更新, 减少不必要的 notify
98
+ if (isString(data) || isNumber(data) || isBoolean(data)) {
99
+ const currentData = this.storeMap[storeName]['store'][key]; // eslint-disable-line
100
+ if (currentData === data) return;
101
+ }
102
+ this.storeMap[storeName]?.update(key, data);
103
+ this.notify(storeName, key);
104
+ }
105
+
106
+ /**
107
+ * 获取 Store 的上一个状态值
108
+ * @param {StoreName} storeName store 名称
109
+ * @param {string} key 待获取的 key
110
+ * @returns {Any}
111
+ */
112
+ getPrevData(storeName: StoreName, key: string) {
113
+ return this.storeMap[storeName]?.getPrevData(key);
114
+ }
115
+
116
+ /**
117
+ * 获取 Store 数据
118
+ * @param {StoreName} storeName store 名称
119
+ * @param {string} key 待获取的 key
120
+ * @returns {Any}
121
+ */
122
+ getData(storeName: StoreName, key: string) {
123
+ return this.storeMap[storeName]?.getData(key);
124
+ }
125
+
126
+ /**
127
+ * UI 组件注册监听回调
128
+ * @param {StoreName} storeName store 名称
129
+ * @param {string} key 变更的 key
130
+ */
131
+ private notify(storeName: StoreName, key: string) {
132
+ if (!this.task[storeName]) {
133
+ return;
134
+ }
135
+ const watcher = this.task[storeName];
136
+ if (watcher[key]) {
137
+ const callbackMap = watcher[key];
138
+ const data = this.getData(storeName, key);
139
+ for (const [callback] of callbackMap.entries()) {
140
+ callback.call(this, data);
141
+ }
142
+ }
143
+ }
144
+
145
+ public reset(storeName: StoreName, keyList: Array<string> = [], isNotificationNeeded = false) {
146
+ if (storeName in this.storeMap) {
147
+ const store = this.storeMap[storeName];
148
+ // reset all
149
+ if (keyList.length === 0) {
150
+ keyList = Object.keys(store?.store);
151
+ }
152
+ store.reset(keyList);
153
+ if (isNotificationNeeded) {
154
+ keyList.forEach((key) => {
155
+ this.notify(storeName, key);
156
+ });
157
+ }
158
+ }
159
+ }
160
+ // 批量修改多个 key-value
161
+ public updateStore(params: any, name?: StoreName): void {
162
+ const storeName = name ? name : StoreName.CALL;
163
+ Object.keys(params).forEach((key) => {
164
+ this.update(storeName, key, params[key]);
165
+ });
166
+ }
167
+ }