@x-edu/live-player 0.0.32 → 0.0.33

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 (304) hide show
  1. package/.browserslistrc +10 -10
  2. package/.eslintignore +8 -8
  3. package/.eslintrc.js +26 -26
  4. package/.gem-mine +11 -11
  5. package/.postcssrc.js +6 -6
  6. package/README.md +145 -145
  7. package/babel.config.js +33 -33
  8. package/dist/XEduLivePlayer.common.js +11429 -892
  9. package/dist/XEduLivePlayerPre.common.js +11416 -879
  10. package/doc/develop.md +23 -23
  11. package/gem-mine.config.js +86 -86
  12. package/jest.config.js +9 -9
  13. package/jsconfig.json +15 -15
  14. package/mock/helper.js +8 -8
  15. package/mock/index.js +34 -34
  16. package/package.json +98 -99
  17. package/public/3rd/ali-player/alipayercomponents-1.0.8.min.js +26 -26
  18. package/public/3rd/ali-player/aliplayer-hls-min.js +27 -27
  19. package/public/3rd/ali-player/aliplayer-min.js +1 -1
  20. package/public/3rd/im-web-push/index.umd.js +14 -14
  21. package/public/JsBridge.js +1602 -1602
  22. package/public/fish/editor/themes/default/css/ueditor.css +1905 -1905
  23. package/public/fish/editor/third-party/codemirror/codemirror.css +104 -104
  24. package/public/fish/editor/third-party/codemirror/codemirror.js +3581 -3581
  25. package/public/fish/editor/third-party/zeroclipboard/ZeroClipboard.js +1255 -1255
  26. package/public/fish/editor/ueditor.all.min.js +16 -16
  27. package/public/fish/editor/ueditor.config.js +467 -467
  28. package/public/fish/icon/umd-4.1.2.js +1 -1
  29. package/public/fish/video/videoplayer.min.css +6 -6
  30. package/public/fish/video/videoplayer.min.js +31 -31
  31. package/public/fish/video/zh-CN.js +82 -82
  32. package/public/icon/demo.css +539 -539
  33. package/public/icon/demo_index.html +2189 -2189
  34. package/public/icon/iconfont.css +363 -363
  35. package/public/icon/iconfont.json +618 -618
  36. package/public/index.html +50 -50
  37. package/script/image/readme.md +77 -77
  38. package/script/postcss.js +48 -48
  39. package/src/App.jsx +24 -24
  40. package/src/asset/img/course/playing.svg +21 -21
  41. package/src/asset/img/icon-course-white.svg +3 -3
  42. package/src/asset/img/icon-course.svg +3 -3
  43. package/src/asset/img/icon-eye-white.svg +4 -4
  44. package/src/asset/img/icon-eye.svg +4 -4
  45. package/src/asset/img/icon-school-white.svg +3 -3
  46. package/src/asset/img/icon-school.svg +3 -3
  47. package/src/asset/img/loading.svg +52 -52
  48. package/src/asset/img/video-play.svg +6 -6
  49. package/src/asset/style/background.less +19 -19
  50. package/src/asset/style/banner.less +36 -36
  51. package/src/asset/style/base.less +74 -74
  52. package/src/asset/style/index.less +114 -114
  53. package/src/asset/style/reset-theme.less +141 -141
  54. package/src/asset/style/theme/index.less +55 -55
  55. package/src/asset/style/theme/party/global.less +20 -20
  56. package/src/asset/style/theme/party/override.less +57 -57
  57. package/src/asset/style/theme/test/global.less +18 -18
  58. package/src/asset/style/theme/test/override.less +45 -45
  59. package/src/asset/style/variable.less +12 -12
  60. package/src/component/AliPlayer/index.jsx +49 -49
  61. package/src/component/Avatar/index.jsx +50 -50
  62. package/src/component/Empty/index.jsx +34 -34
  63. package/src/component/Empty/index.module.less +37 -37
  64. package/src/component/IMChatroom/component/status/403.jsx +13 -13
  65. package/src/component/IMChatroom/component/status/404.jsx +13 -13
  66. package/src/component/IMChatroom/component/status/Error.jsx +23 -23
  67. package/src/component/IMChatroom/component/status/Loading.jsx +5 -5
  68. package/src/component/IMChatroom/config/app/config.js +118 -118
  69. package/src/component/IMChatroom/config/app/index.js +60 -60
  70. package/src/component/IMChatroom/config/env.js +5 -5
  71. package/src/component/IMChatroom/config/index.js +3 -3
  72. package/src/component/IMChatroom/config/request/config/base.js +124 -124
  73. package/src/component/IMChatroom/config/request/config/chatroom.js +26 -26
  74. package/src/component/IMChatroom/config/request/config/imCoreApi.js +21 -21
  75. package/src/component/IMChatroom/config/request/index.js +21 -21
  76. package/src/component/IMChatroom/config/request/proxy.js +39 -39
  77. package/src/component/IMChatroom/config/url.js +7 -7
  78. package/src/component/IMChatroom/constants/errorCode.js +9 -9
  79. package/src/component/IMChatroom/constants/index.js +84 -84
  80. package/src/component/IMChatroom/constants/origin.js +27 -27
  81. package/src/component/IMChatroom/context/chatroom.js +154 -154
  82. package/src/component/IMChatroom/context/connect.js +28 -28
  83. package/src/component/IMChatroom/i18n/en/index.json +73 -73
  84. package/src/component/IMChatroom/i18n/index.jsx +14 -14
  85. package/src/component/IMChatroom/i18n/language.js +9 -9
  86. package/src/component/IMChatroom/i18n/zh-CN/index.json +73 -73
  87. package/src/component/IMChatroom/index.jsx +49 -49
  88. package/src/component/IMChatroom/page/chat/index.jsx +27 -27
  89. package/src/component/IMChatroom/page/chat/messageEditor/index.jsx +375 -375
  90. package/src/component/IMChatroom/page/chat/messageList/index.jsx +354 -354
  91. package/src/component/IMChatroom/page/chat/stickedMessage/index.jsx +59 -59
  92. package/src/component/IMChatroom/page/chat/stickedMessage/style/index.module.less +7 -7
  93. package/src/component/IMChatroom/page/chat/style/index.module.less +51 -51
  94. package/src/component/IMChatroom/page/home/connect/index.jsx +188 -188
  95. package/src/component/IMChatroom/page/home/connect/status.jsx +124 -124
  96. package/src/component/IMChatroom/page/home/context/cmd.jsx +37 -37
  97. package/src/component/IMChatroom/page/home/context/index.jsx +67 -67
  98. package/src/component/IMChatroom/page/home/index.jsx +164 -164
  99. package/src/component/IMChatroom/page/home/notice/index.jsx +123 -123
  100. package/src/component/IMChatroom/page/home/notice/style/index.module.less +49 -49
  101. package/src/component/IMChatroom/page/home/style/index.module.less +110 -110
  102. package/src/component/IMChatroom/page/member/index.jsx +15 -15
  103. package/src/component/IMChatroom/page/member/memberCount/index.jsx +44 -44
  104. package/src/component/IMChatroom/page/member/memberList/index.jsx +121 -121
  105. package/src/component/IMChatroom/page/member/style/index.module.less +2 -2
  106. package/src/component/IMChatroom/sdk/bridge.js +39 -39
  107. package/src/component/IMChatroom/sdk/cs/constants.js +20 -20
  108. package/src/component/IMChatroom/sdk/cs/index.js +101 -101
  109. package/src/component/IMChatroom/sdk/imChatroom.js +15 -15
  110. package/src/component/IMChatroom/sdk/imcore/constants.js +128 -128
  111. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomDestroyed.js +5 -5
  112. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomInfoGetFail.js +5 -5
  113. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomKickedByAdmin.js +5 -5
  114. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomKickedBySelf.js +5 -5
  115. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomLoginFail.js +5 -5
  116. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomLoginSuccess.js +5 -5
  117. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomMemberLogin.js +5 -5
  118. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomMemberLogout.js +5 -5
  119. package/src/component/IMChatroom/sdk/imcore/emitters/connectionConnected.js +5 -5
  120. package/src/component/IMChatroom/sdk/imcore/emitters/connectionConnecting.js +5 -5
  121. package/src/component/IMChatroom/sdk/imcore/emitters/connectionDisconnect.js +5 -5
  122. package/src/component/IMChatroom/sdk/imcore/emitters/index.js +57 -57
  123. package/src/component/IMChatroom/sdk/imcore/emitters/messageReceive.js +36 -36
  124. package/src/component/IMChatroom/sdk/imcore/index.js +178 -178
  125. package/src/component/IMChatroom/sdk/imcore/interceptors/request.js +7 -7
  126. package/src/component/IMChatroom/sdk/imcore/interceptors/response.js +5 -5
  127. package/src/component/IMChatroom/sdk/imcore/plugins/getAuth.js +64 -64
  128. package/src/component/IMChatroom/sdk/imcore/plugins/getConversationId.js +20 -20
  129. package/src/component/IMChatroom/sdk/imcore/plugins/getExtInfo.js +10 -10
  130. package/src/component/IMChatroom/sdk/imcore/plugins/getLoginInfo.js +48 -48
  131. package/src/component/IMChatroom/sdk/imcore/plugins/getPlatformType.js +12 -12
  132. package/src/component/IMChatroom/sdk/imcore/plugins/index.js +22 -22
  133. package/src/component/IMChatroom/sdk/imcore/util/format.js +177 -177
  134. package/src/component/IMChatroom/sdk/imcore/util/parser.js +35 -35
  135. package/src/component/IMChatroom/sdk/oms.js +18 -18
  136. package/src/component/IMChatroom/sdk/uc.js +3 -3
  137. package/src/component/IMChatroom/subscription/channel/app.js +5 -5
  138. package/src/component/IMChatroom/subscription/channel/ctl.js +22 -22
  139. package/src/component/IMChatroom/subscription/channel/member.js +40 -40
  140. package/src/component/IMChatroom/subscription/channel/message.js +13 -13
  141. package/src/component/IMChatroom/subscription/channel/ntf.js +86 -86
  142. package/src/component/IMChatroom/subscription/channel/tel.js +5 -5
  143. package/src/component/IMChatroom/subscription/channel/websocket.js +5 -5
  144. package/src/component/IMChatroom/subscription/event.js +37 -37
  145. package/src/component/IMChatroom/subscription/index.js +19 -19
  146. package/src/component/IMChatroom/util/account.js +8 -8
  147. package/src/component/IMChatroom/util/chatroom.js +255 -255
  148. package/src/component/IMChatroom/util/jsonBigInt.js +5 -5
  149. package/src/component/IMChatroom/util/location.js +12 -12
  150. package/src/component/Icon/index.jsx +16 -16
  151. package/src/component/Icon/index.module.less +2 -2
  152. package/src/component/Pagination/LocalPagination.jsx +27 -27
  153. package/src/component/Pagination/RemotePagination.jsx +32 -32
  154. package/src/component/Pagination/index.jsx +32 -32
  155. package/src/component/Pagination/index.module.less +117 -117
  156. package/src/component/PlayerTip/index.jsx +34 -34
  157. package/src/component/VideoBase/index.jsx +242 -242
  158. package/src/component/VideoBase/style.less +65 -65
  159. package/src/component/VideoBase/utils.js +81 -81
  160. package/src/component/mixin.less +9 -9
  161. package/src/component/status/403.jsx +15 -15
  162. package/src/component/status/404/index.jsx +73 -73
  163. package/src/component/status/404/index.module.less +36 -36
  164. package/src/component/status/Error/error.module.less +13 -13
  165. package/src/component/status/Error/index.jsx +47 -47
  166. package/src/component/status/Loading/img/loading.svg +52 -52
  167. package/src/component/status/Loading/index.jsx +31 -31
  168. package/src/component/status/Loading/index.less +56 -56
  169. package/src/component/status/None/index.jsx +20 -20
  170. package/src/component/status/None/index.module.less +35 -35
  171. package/src/component/status/Status/index.jsx +26 -26
  172. package/src/component/status/Status/index.module.less +8 -8
  173. package/src/config/constant/commonUrl.js +2 -2
  174. package/src/config/constant/user.js +6 -6
  175. package/src/config/context/site-config.js +48 -48
  176. package/src/config/env/index.js +5 -5
  177. package/src/config/env/local/index.js +13 -13
  178. package/src/config/env/ncet-xedu/api.js +175 -175
  179. package/src/config/env/ncet-xedu/app.js +12 -12
  180. package/src/config/env/ncet-xedu/cs.js +8 -8
  181. package/src/config/env/ncet-xedu/index.js +14 -14
  182. package/src/config/env/ncet-xedu/push.js +5 -5
  183. package/src/config/env/preproduction/api.js +144 -144
  184. package/src/config/env/preproduction/app.js +12 -12
  185. package/src/config/env/preproduction/cs.js +8 -8
  186. package/src/config/env/preproduction/index.js +14 -14
  187. package/src/config/env/preproduction/push.js +5 -5
  188. package/src/config/env/product/api.js +113 -113
  189. package/src/config/env/product/app.js +12 -12
  190. package/src/config/env/product/cs.js +5 -5
  191. package/src/config/env/product/index.js +14 -14
  192. package/src/config/env/product/push.js +5 -5
  193. package/src/config/live.js +80 -80
  194. package/src/config/publicLive.js +53 -53
  195. package/src/config/request/assessments.js +24 -24
  196. package/src/config/request/config-center.js +8 -8
  197. package/src/config/request/helper.js +190 -166
  198. package/src/config/request/im-broadcasts.js +12 -12
  199. package/src/config/request/live-activity-gateway.js +8 -8
  200. package/src/config/request/live-activity.js +13 -13
  201. package/src/config/request/raw.js +6 -6
  202. package/src/config/request/x-cloud-web.js +13 -13
  203. package/src/config/request/x-proxy.js +34 -34
  204. package/src/demo/Detail.jsx +11 -11
  205. package/src/demo/List.jsx +68 -68
  206. package/src/demo/index.jsx +17 -17
  207. package/src/detail/LineSwitch/index.jsx +71 -71
  208. package/src/detail/LiveCountDown/index.jsx +44 -44
  209. package/src/detail/LiveCountDown/index.module.less +31 -31
  210. package/src/detail/LiveOnlineCount/img/icon.svg +15 -15
  211. package/src/detail/LiveOnlineCount/index.jsx +68 -68
  212. package/src/detail/LiveOnlineCount/index.module.less +34 -34
  213. package/src/detail/LiveOnlineCount/util.js +74 -74
  214. package/src/detail/LiveStatus/AnchorOnTheWay.jsx +88 -88
  215. package/src/detail/LiveStatus/index.jsx +202 -202
  216. package/src/detail/LiveStatus/index.module.less +192 -192
  217. package/src/detail/LiveVideo/config.js +37 -37
  218. package/src/detail/LiveVideo/index.jsx +188 -188
  219. package/src/detail/LiveVideo/index.module.less +41 -41
  220. package/src/detail/NotLoginChatroom/index.jsx +37 -37
  221. package/src/detail/NotLoginChatroom/index.module.less +46 -46
  222. package/src/detail/RecordVideo/index.jsx +150 -150
  223. package/src/detail/RecordVideo/index.module.less +31 -31
  224. package/src/detail/ReplayVideo/index.jsx +93 -93
  225. package/src/detail/ReplayVideo/index.module.less +65 -65
  226. package/src/detail/const.js +20 -20
  227. package/src/detail/hook/usePullSource.js +82 -82
  228. package/src/detail/hook/usePullState.js +51 -51
  229. package/src/detail/index.jsx +483 -482
  230. package/src/detail/index.module.less +188 -188
  231. package/src/hook/useAsync.js +84 -84
  232. package/src/hook/useGoToPage.js +83 -83
  233. package/src/hook/useInterval.js +28 -28
  234. package/src/hook/useIsMounted.js +17 -17
  235. package/src/hook/useModuleByRole.js +53 -53
  236. package/src/hook/usePageScrollable.js +52 -52
  237. package/src/hook/usePortal.js +83 -83
  238. package/src/hook/useScrollRestore/index.js +32 -32
  239. package/src/hook/useScrollRestore/scrollContext.js +20 -20
  240. package/src/hook/useTrackRef.js +11 -11
  241. package/src/hook/useWindowSize.js +28 -28
  242. package/src/hook/useZoom.js +47 -47
  243. package/src/index.js +10 -10
  244. package/src/lib/getLiveOnlineCount.js +10 -10
  245. package/src/lib/getServiceConfig.js +102 -102
  246. package/src/list/Empty/index.jsx +20 -20
  247. package/src/list/Empty/index.module.less +23 -23
  248. package/src/list/ListItem/Action/index.jsx +109 -109
  249. package/src/list/ListItem/Action/index.module.less +25 -25
  250. package/src/list/ListItem/img/dianzan.svg +4 -4
  251. package/src/list/ListItem/img/like-fill.svg +8 -8
  252. package/src/list/ListItem/img/play.svg +15 -15
  253. package/src/list/ListItem/img/view-fill.svg +8 -8
  254. package/src/list/ListItem/img/yiguankan.svg +3 -3
  255. package/src/list/ListItem/index.module.less +158 -158
  256. package/src/list/index.jsx +241 -240
  257. package/src/list/index.module.less +38 -38
  258. package/src/service/common.js +73 -73
  259. package/src/service/content-mgr.js +73 -73
  260. package/src/service/im-group.js +12 -12
  261. package/src/service/im.js +7 -7
  262. package/src/service/imBroadcasts.js +33 -33
  263. package/src/service/like.js +134 -134
  264. package/src/service/live.js +293 -293
  265. package/src/service/manageApi.js +7 -7
  266. package/src/service/managePortal.js +6 -6
  267. package/src/service/myStudyRecord.js +93 -93
  268. package/src/service/navigation.js +47 -47
  269. package/src/service/ndMeeting.js +10 -10
  270. package/src/service/ndr.js +122 -122
  271. package/src/service/news.js +93 -93
  272. package/src/service/personalCenter.js +270 -270
  273. package/src/service/qualityCourse.js +31 -31
  274. package/src/service/recommend.js +81 -81
  275. package/src/service/school.js +323 -323
  276. package/src/service/search.js +170 -170
  277. package/src/service/site-config.js +7 -7
  278. package/src/service/socialCensor.js +45 -45
  279. package/src/service/specialEdu.js +31 -31
  280. package/src/service/suggestion.js +85 -85
  281. package/src/service/syncClassroom.js +321 -321
  282. package/src/service/tCourse.js +204 -204
  283. package/src/service/tchTraining.js +37 -37
  284. package/src/service/uc.js +45 -45
  285. package/src/util/app.js +1 -1
  286. package/src/util/array.js +3 -3
  287. package/src/util/auth/func.js +57 -57
  288. package/src/util/date.js +53 -53
  289. package/src/util/env.js +9 -9
  290. package/src/util/getTimestamp.js +10 -10
  291. package/src/util/hof.js +105 -105
  292. package/src/util/live/index.js +42 -42
  293. package/src/util/liveCountUtil.js +52 -52
  294. package/src/util/netUrl.js +35 -35
  295. package/src/util/object.js +13 -13
  296. package/src/util/push/index.js +58 -58
  297. package/src/util/request.js +227 -227
  298. package/src/util/type.js +17 -17
  299. package/src/util/url.js +203 -203
  300. package/src/util/video.js +26 -26
  301. package/test/setup.js +21 -21
  302. package/test/unit/component/header/logo.spec.jsx +8 -8
  303. package/test/unit/helper.jsx +25 -25
  304. package/test/unit/util/date.spec.js +40 -40
@@ -1,35 +1,35 @@
1
- import memoize from 'lodash/memoize'
2
-
3
- export const isSupportWebp = memoize(() => {
4
- try {
5
- return document.createElement('canvas').toDataURL('image/webp', 0.5).indexOf('data:image/webp') === 0
6
- } catch (err) {
7
- return false
8
- }
9
- })
10
-
11
- export default (src, size) => {
12
- if (!src) {
13
- return ''
14
- }
15
- // TODO 是否一定要encode,如果未来出问题,移除encodeURI
16
- let imageSrc = src.indexOf('%') === -1
17
- ? encodeURI(decodeURI(src))
18
- : src
19
- const linkStr = imageSrc.indexOf('?') !== -1 ? '&' : '?'
20
- const type = isSupportWebp() ? 'auto' : null
21
- if (size) {
22
- const preStr = `${linkStr}x-bce-process=image${type ? `/format,f_${type}` : ''}/resize,limit_1,m_lfit,`
23
- const sizeString = {
24
- 1080: `${preStr}w_1080`,
25
- 720: `${preStr}w_720`,
26
- 480: `${preStr}w_480`,
27
- 360: `${preStr}w_360`,
28
- 240: `${preStr}w_240`
29
- }[size] || ''
30
- imageSrc += sizeString
31
- } else if (type) {
32
- imageSrc += `${linkStr}x-bce-process=image/format,f_${type}`
33
- }
34
- return imageSrc
35
- }
1
+ import memoize from 'lodash/memoize'
2
+
3
+ export const isSupportWebp = memoize(() => {
4
+ try {
5
+ return document.createElement('canvas').toDataURL('image/webp', 0.5).indexOf('data:image/webp') === 0
6
+ } catch (err) {
7
+ return false
8
+ }
9
+ })
10
+
11
+ export default (src, size) => {
12
+ if (!src) {
13
+ return ''
14
+ }
15
+ // TODO 是否一定要encode,如果未来出问题,移除encodeURI
16
+ let imageSrc = src.indexOf('%') === -1
17
+ ? encodeURI(decodeURI(src))
18
+ : src
19
+ const linkStr = imageSrc.indexOf('?') !== -1 ? '&' : '?'
20
+ const type = isSupportWebp() ? 'auto' : null
21
+ if (size) {
22
+ const preStr = `${linkStr}x-bce-process=image${type ? `/format,f_${type}` : ''}/resize,limit_1,m_lfit,`
23
+ const sizeString = {
24
+ 1080: `${preStr}w_1080`,
25
+ 720: `${preStr}w_720`,
26
+ 480: `${preStr}w_480`,
27
+ 360: `${preStr}w_360`,
28
+ 240: `${preStr}w_240`
29
+ }[size] || ''
30
+ imageSrc += sizeString
31
+ } else if (type) {
32
+ imageSrc += `${linkStr}x-bce-process=image/format,f_${type}`
33
+ }
34
+ return imageSrc
35
+ }
@@ -1,13 +1,13 @@
1
- export function pick(obj, keys) {
2
- if (!Array.isArray(keys)) {
3
- return {}
4
- }
5
- return keys.reduce((result, key) => {
6
- if (Object.prototype.hasOwnProperty.call(obj, key)) {
7
- result[key] = obj[key]
8
- }
9
- return result
10
- }, {})
11
- }
12
-
13
- export const isEmpty = (obj) => !obj || Object.keys(obj).length === 0
1
+ export function pick(obj, keys) {
2
+ if (!Array.isArray(keys)) {
3
+ return {}
4
+ }
5
+ return keys.reduce((result, key) => {
6
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
7
+ result[key] = obj[key]
8
+ }
9
+ return result
10
+ }, {})
11
+ }
12
+
13
+ export const isEmpty = (obj) => !obj || Object.keys(obj).length === 0
@@ -1,58 +1,58 @@
1
- import { Loader } from 'fish'
2
- import env from '@/config/env'
3
-
4
- const url = '/3rd/im-web-push/index.umd.js'
5
- const { loadJS } = Loader
6
- let instPromise
7
-
8
- // http://git.sdp.nd/component-h5/web-im-push/-/tree/master
9
- class ImPush {
10
- constructor() {
11
- this.listeners = []
12
- }
13
-
14
- async init() {
15
- if (instPromise) {
16
- return instPromise
17
- }
18
- instPromise = loadJS(url, 'ndiot_push').then(() => {
19
- window.ndiot_push.open({
20
- url: env.push.host,
21
- appId: env.app.appid,
22
- disableSharedWorker: true
23
- })
24
- return window.ndiot_push
25
- })
26
- return instPromise
27
- }
28
-
29
- getInstance() {
30
- return window.ndiot_push
31
- }
32
-
33
- addTopicListener(name, listener) {
34
- const inst = this.getInstance()
35
- this.listeners.push(listener)
36
- inst.subscribe(name)
37
- this.listen()
38
- }
39
-
40
- removeTopicListener(name, listener) {
41
- const inst = this.getInstance()
42
- this.listeners = this.listeners.filter((l) => l !== listener)
43
- inst.unsubscribe(name)
44
- this.listen()
45
- }
46
-
47
- listen() {
48
- const inst = this.getInstance()
49
- inst.onNewMessage = (data) => {
50
- console.log('im-push', data)
51
- this.listeners.forEach((l) => {
52
- l(data)
53
- })
54
- }
55
- }
56
- }
57
-
58
- export default new ImPush()
1
+ import { Loader } from 'fish'
2
+ import env from '@/config/env'
3
+
4
+ const url = '/3rd/im-web-push/index.umd.js'
5
+ const { loadJS } = Loader
6
+ let instPromise
7
+
8
+ // http://git.sdp.nd/component-h5/web-im-push/-/tree/master
9
+ class ImPush {
10
+ constructor() {
11
+ this.listeners = []
12
+ }
13
+
14
+ async init() {
15
+ if (instPromise) {
16
+ return instPromise
17
+ }
18
+ instPromise = loadJS(url, 'ndiot_push').then(() => {
19
+ window.ndiot_push.open({
20
+ url: env.push.host,
21
+ appId: env.app.appid,
22
+ disableSharedWorker: true
23
+ })
24
+ return window.ndiot_push
25
+ })
26
+ return instPromise
27
+ }
28
+
29
+ getInstance() {
30
+ return window.ndiot_push
31
+ }
32
+
33
+ addTopicListener(name, listener) {
34
+ const inst = this.getInstance()
35
+ this.listeners.push(listener)
36
+ inst.subscribe(name)
37
+ this.listen()
38
+ }
39
+
40
+ removeTopicListener(name, listener) {
41
+ const inst = this.getInstance()
42
+ this.listeners = this.listeners.filter((l) => l !== listener)
43
+ inst.unsubscribe(name)
44
+ this.listen()
45
+ }
46
+
47
+ listen() {
48
+ const inst = this.getInstance()
49
+ inst.onNewMessage = (data) => {
50
+ console.log('im-push', data)
51
+ this.listeners.forEach((l) => {
52
+ l(data)
53
+ })
54
+ }
55
+ }
56
+ }
57
+
58
+ export default new ImPush()
@@ -1,227 +1,227 @@
1
- import axios from 'axios'
2
- import queryString from 'query-string'
3
- import { isFunction } from './type'
4
-
5
- const STATUS = {
6
- pending: 1,
7
- finish: 2,
8
- error: 3
9
- }
10
-
11
- export default class Request {
12
- static create(config) {
13
- const cache = {}
14
- const _config = {
15
- withCredentials: false,
16
- loadingTime: 1500,
17
- shouldBlock(error) {
18
- const status = error?.response?.status
19
- return status === 429 || status === 503
20
- },
21
- block(_c) {
22
- return true
23
- },
24
- blockTime: 10 * 60 * 1000,
25
- shouldRetry(error) {
26
- return error?.response?.status >= 500
27
- },
28
- ...config
29
- }
30
- const instance = axios.create(_config)
31
-
32
- const originRequest = instance.request.bind(instance)
33
- let blockRequest = false
34
- let blockError = null
35
-
36
- const handleError = (error, c) => {
37
- // failover 对于一个请求只允许进行一次
38
- if (isFunction(c.failover)) {
39
- const newConfig = c.failover(error, c)
40
- if (typeof newConfig === 'object') {
41
- return instance.request({
42
- ...newConfig,
43
- failover: false
44
- })
45
- }
46
- }
47
-
48
- if (isFunction(c.shouldBlock)) {
49
- blockRequest = c.shouldBlock(error)
50
- blockError = error
51
- setTimeout(() => {
52
- blockRequest = false
53
- blockError = null
54
- }, c.blockTime)
55
- }
56
-
57
- if (c.retry > 0 && c._retry < Math.min(c.retry, 2)) {
58
- if (c.shouldRetry(error)) {
59
- c._retry += 1
60
- return instance.request(c)
61
- }
62
- }
63
- if (isFunction(c.error)) {
64
- c.error(error, c)
65
- }
66
- return Promise.reject(error)
67
- }
68
-
69
- const getKey = ({ key, params, url }) => {
70
- if (key) {
71
- return key
72
- }
73
- const query = queryString.stringify(params)
74
- const _key = `${url}${query ?? `?${query}`}`
75
- return _key
76
- }
77
-
78
- const clearLoadingTimer = (key) => {
79
- if (cache[key]) {
80
- const { timer } = cache[key]
81
- if (timer) {
82
- clearTimeout(timer)
83
- }
84
- }
85
- }
86
-
87
- instance.request = function request(c) {
88
- const key = getKey(c)
89
- c.key = key
90
- const exist = cache[key]
91
- if (exist) {
92
- // get 请求支持缓存
93
- if (c.method === 'get') {
94
- // 同 url 请求还在等待的直接返回,不发起请求
95
- if (exist.status === STATUS.pending) {
96
- return cache[key]._request
97
- }
98
- // 强制请求,直接发起,忽略缓存情况
99
- if (c.force) {
100
- return originRequest(c)
101
- }
102
- // 存在缓存数据,直接使用
103
- if (cache[key].response) {
104
- return Promise.resolve(cache[key].response)
105
- }
106
- }
107
- } else {
108
- const { loading = _config.loading, loadingTime = _config.loadingTime } = c
109
- cache[key] = {
110
- status: STATUS.pending,
111
- timer: setTimeout(() => {
112
- if (isFunction(loading)) {
113
- loading({
114
- ...c,
115
- key
116
- })
117
- }
118
- }, loadingTime)
119
- }
120
- }
121
-
122
- const req = originRequest(c)
123
- cache[key]._request = req
124
- return req
125
- }
126
-
127
- {
128
- const actions = ['delete', 'get', 'head', 'options']
129
- actions.forEach((method) => {
130
- instance[method] = function request(url, c) {
131
- return instance.request({
132
- ...c,
133
- method,
134
- url,
135
- data: (c || {}).data
136
- })
137
- }
138
- })
139
- }
140
-
141
- {
142
- const actions = ['post', 'put', 'patch']
143
- actions.forEach((method) => {
144
- instance[method] = function request(url, data, c) {
145
- return instance.request({
146
- ...c,
147
- method,
148
- url,
149
- data
150
- })
151
- }
152
- })
153
- }
154
-
155
- instance.interceptors.request.use(
156
- (c) => {
157
- if (blockRequest && c.block(c)) {
158
- return Promise.reject(blockError)
159
- }
160
- c._retry = c._retry ?? 0
161
- return c
162
- },
163
- (error) => handleError(error, error.config)
164
- )
165
-
166
- instance.interceptors.response.use(
167
- (response) => {
168
- const c = response.config
169
- const { ttl, method, key } = c
170
- if (key) {
171
- clearLoadingTimer(key)
172
- if (cache[key]) {
173
- cache[key].status = STATUS.finish
174
-
175
- if (method.toLocaleLowerCase() === 'get' && ttl > 0) {
176
- cache[key].response = response
177
- if (cache[key].clearCacheTimer) {
178
- clearTimeout(cache[key].clearCacheTimer)
179
- }
180
- cache[key].clearCacheTimer = setTimeout(() => {
181
- delete cache[key]
182
- }, ttl)
183
- } else {
184
- delete cache[key]
185
- }
186
- }
187
- }
188
- if (isFunction(_config.complete)) {
189
- _config.complete(c)
190
- }
191
- return response
192
- },
193
- (error) => {
194
- const { key } = error.config
195
- if (key) {
196
- clearLoadingTimer(key)
197
- if (cache[key]) {
198
- cache[key].status = STATUS.error
199
- delete cache[key]
200
- }
201
- }
202
- if (isFunction(_config.complete)) {
203
- _config.complete(error.config)
204
- }
205
- return handleError(error, error.config)
206
- }
207
- )
208
-
209
- instance.clear = function clear(url) {
210
- if (url) {
211
- const item = cache[url]
212
- if (item && item.status !== STATUS.pending) {
213
- delete cache[url]
214
- }
215
- } else {
216
- Object.keys(cache).forEach((key) => {
217
- const item = cache[key]
218
- if (item && item.status !== STATUS.pending) {
219
- delete cache[key]
220
- }
221
- })
222
- }
223
- }
224
-
225
- return instance
226
- }
227
- }
1
+ import axios from 'axios'
2
+ import queryString from 'query-string'
3
+ import { isFunction } from './type'
4
+
5
+ const STATUS = {
6
+ pending: 1,
7
+ finish: 2,
8
+ error: 3
9
+ }
10
+
11
+ export default class Request {
12
+ static create(config) {
13
+ const cache = {}
14
+ const _config = {
15
+ withCredentials: false,
16
+ loadingTime: 1500,
17
+ shouldBlock(error) {
18
+ const status = error?.response?.status
19
+ return status === 429 || status === 503
20
+ },
21
+ block(_c) {
22
+ return true
23
+ },
24
+ blockTime: 10 * 60 * 1000,
25
+ shouldRetry(error) {
26
+ return error?.response?.status >= 500
27
+ },
28
+ ...config
29
+ }
30
+ const instance = axios.create(_config)
31
+
32
+ const originRequest = instance.request.bind(instance)
33
+ let blockRequest = false
34
+ let blockError = null
35
+
36
+ const handleError = (error, c) => {
37
+ // failover 对于一个请求只允许进行一次
38
+ if (isFunction(c.failover)) {
39
+ const newConfig = c.failover(error, c)
40
+ if (typeof newConfig === 'object') {
41
+ return instance.request({
42
+ ...newConfig,
43
+ failover: false
44
+ })
45
+ }
46
+ }
47
+
48
+ if (isFunction(c.shouldBlock)) {
49
+ blockRequest = c.shouldBlock(error)
50
+ blockError = error
51
+ setTimeout(() => {
52
+ blockRequest = false
53
+ blockError = null
54
+ }, c.blockTime)
55
+ }
56
+
57
+ if (c.retry > 0 && c._retry < Math.min(c.retry, 2)) {
58
+ if (c.shouldRetry(error)) {
59
+ c._retry += 1
60
+ return instance.request(c)
61
+ }
62
+ }
63
+ if (isFunction(c.error)) {
64
+ c.error(error, c)
65
+ }
66
+ return Promise.reject(error)
67
+ }
68
+
69
+ const getKey = ({ key, params, url }) => {
70
+ if (key) {
71
+ return key
72
+ }
73
+ const query = queryString.stringify(params)
74
+ const _key = `${url}${query ?? `?${query}`}`
75
+ return _key
76
+ }
77
+
78
+ const clearLoadingTimer = (key) => {
79
+ if (cache[key]) {
80
+ const { timer } = cache[key]
81
+ if (timer) {
82
+ clearTimeout(timer)
83
+ }
84
+ }
85
+ }
86
+
87
+ instance.request = function request(c) {
88
+ const key = getKey(c)
89
+ c.key = key
90
+ const exist = cache[key]
91
+ if (exist) {
92
+ // get 请求支持缓存
93
+ if (c.method === 'get') {
94
+ // 同 url 请求还在等待的直接返回,不发起请求
95
+ if (exist.status === STATUS.pending) {
96
+ return cache[key]._request
97
+ }
98
+ // 强制请求,直接发起,忽略缓存情况
99
+ if (c.force) {
100
+ return originRequest(c)
101
+ }
102
+ // 存在缓存数据,直接使用
103
+ if (cache[key].response) {
104
+ return Promise.resolve(cache[key].response)
105
+ }
106
+ }
107
+ } else {
108
+ const { loading = _config.loading, loadingTime = _config.loadingTime } = c
109
+ cache[key] = {
110
+ status: STATUS.pending,
111
+ timer: setTimeout(() => {
112
+ if (isFunction(loading)) {
113
+ loading({
114
+ ...c,
115
+ key
116
+ })
117
+ }
118
+ }, loadingTime)
119
+ }
120
+ }
121
+
122
+ const req = originRequest(c)
123
+ cache[key]._request = req
124
+ return req
125
+ }
126
+
127
+ {
128
+ const actions = ['delete', 'get', 'head', 'options']
129
+ actions.forEach((method) => {
130
+ instance[method] = function request(url, c) {
131
+ return instance.request({
132
+ ...c,
133
+ method,
134
+ url,
135
+ data: (c || {}).data
136
+ })
137
+ }
138
+ })
139
+ }
140
+
141
+ {
142
+ const actions = ['post', 'put', 'patch']
143
+ actions.forEach((method) => {
144
+ instance[method] = function request(url, data, c) {
145
+ return instance.request({
146
+ ...c,
147
+ method,
148
+ url,
149
+ data
150
+ })
151
+ }
152
+ })
153
+ }
154
+
155
+ instance.interceptors.request.use(
156
+ (c) => {
157
+ if (blockRequest && c.block(c)) {
158
+ return Promise.reject(blockError)
159
+ }
160
+ c._retry = c._retry ?? 0
161
+ return c
162
+ },
163
+ (error) => handleError(error, error.config)
164
+ )
165
+
166
+ instance.interceptors.response.use(
167
+ (response) => {
168
+ const c = response.config
169
+ const { ttl, method, key } = c
170
+ if (key) {
171
+ clearLoadingTimer(key)
172
+ if (cache[key]) {
173
+ cache[key].status = STATUS.finish
174
+
175
+ if (method.toLocaleLowerCase() === 'get' && ttl > 0) {
176
+ cache[key].response = response
177
+ if (cache[key].clearCacheTimer) {
178
+ clearTimeout(cache[key].clearCacheTimer)
179
+ }
180
+ cache[key].clearCacheTimer = setTimeout(() => {
181
+ delete cache[key]
182
+ }, ttl)
183
+ } else {
184
+ delete cache[key]
185
+ }
186
+ }
187
+ }
188
+ if (isFunction(_config.complete)) {
189
+ _config.complete(c)
190
+ }
191
+ return response
192
+ },
193
+ (error) => {
194
+ const { key } = error.config
195
+ if (key) {
196
+ clearLoadingTimer(key)
197
+ if (cache[key]) {
198
+ cache[key].status = STATUS.error
199
+ delete cache[key]
200
+ }
201
+ }
202
+ if (isFunction(_config.complete)) {
203
+ _config.complete(error.config)
204
+ }
205
+ return handleError(error, error.config)
206
+ }
207
+ )
208
+
209
+ instance.clear = function clear(url) {
210
+ if (url) {
211
+ const item = cache[url]
212
+ if (item && item.status !== STATUS.pending) {
213
+ delete cache[url]
214
+ }
215
+ } else {
216
+ Object.keys(cache).forEach((key) => {
217
+ const item = cache[key]
218
+ if (item && item.status !== STATUS.pending) {
219
+ delete cache[key]
220
+ }
221
+ })
222
+ }
223
+ }
224
+
225
+ return instance
226
+ }
227
+ }