@x-edu/live-player 0.0.19 → 0.0.21

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 (302) 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 +12161 -1154
  9. package/dist/XEduLivePlayerPre.common.js +12369 -1358
  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 +99 -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 +31 -31
  155. package/src/component/Pagination/index.module.less +110 -110
  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 +166 -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 +64 -64
  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 +482 -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 +98 -98
  249. package/src/list/ListItem/Action/index.module.less +21 -21
  250. package/src/list/ListItem/img/dianzan.svg +4 -0
  251. package/src/list/ListItem/img/play.svg +15 -15
  252. package/src/list/ListItem/img/yiguankan.svg +3 -0
  253. package/src/list/ListItem/index.jsx +24 -1
  254. package/src/list/ListItem/index.module.less +146 -123
  255. package/src/list/index.jsx +80 -0
  256. package/src/list/index.module.less +35 -35
  257. package/src/service/common.js +73 -73
  258. package/src/service/content-mgr.js +73 -73
  259. package/src/service/im-group.js +12 -12
  260. package/src/service/im.js +7 -7
  261. package/src/service/imBroadcasts.js +33 -33
  262. package/src/service/like.js +134 -134
  263. package/src/service/manageApi.js +7 -7
  264. package/src/service/managePortal.js +6 -6
  265. package/src/service/myStudyRecord.js +93 -93
  266. package/src/service/navigation.js +47 -47
  267. package/src/service/ndMeeting.js +10 -10
  268. package/src/service/ndr.js +122 -122
  269. package/src/service/news.js +93 -93
  270. package/src/service/personalCenter.js +270 -270
  271. package/src/service/qualityCourse.js +31 -31
  272. package/src/service/recommend.js +81 -81
  273. package/src/service/school.js +323 -323
  274. package/src/service/search.js +170 -170
  275. package/src/service/site-config.js +7 -7
  276. package/src/service/socialCensor.js +45 -45
  277. package/src/service/specialEdu.js +31 -31
  278. package/src/service/suggestion.js +85 -85
  279. package/src/service/syncClassroom.js +321 -321
  280. package/src/service/tCourse.js +204 -204
  281. package/src/service/tchTraining.js +37 -37
  282. package/src/service/uc.js +45 -45
  283. package/src/util/app.js +1 -1
  284. package/src/util/array.js +3 -3
  285. package/src/util/auth/func.js +57 -57
  286. package/src/util/date.js +53 -53
  287. package/src/util/env.js +9 -9
  288. package/src/util/getTimestamp.js +10 -10
  289. package/src/util/hof.js +105 -105
  290. package/src/util/live/index.js +42 -42
  291. package/src/util/liveCountUtil.js +52 -0
  292. package/src/util/netUrl.js +35 -35
  293. package/src/util/object.js +13 -13
  294. package/src/util/push/index.js +58 -58
  295. package/src/util/request.js +227 -227
  296. package/src/util/type.js +17 -17
  297. package/src/util/url.js +203 -203
  298. package/src/util/video.js +26 -26
  299. package/test/setup.js +21 -21
  300. package/test/unit/component/header/logo.spec.jsx +8 -8
  301. package/test/unit/helper.jsx +25 -25
  302. package/test/unit/util/date.spec.js +40 -40
@@ -1,32 +1,32 @@
1
- import { useContext, useLayoutEffect, useEffect } from 'react'
2
- import { useLocation } from 'react-router-dom'
3
- import { ScrollContext } from './scrollContext'
4
- import { isSticky, StickyTop } from '@/util/stickyStatus'
5
- import { isInElectron } from '@/util/env'
6
-
7
- export function useScrollRestoration(
8
- identifier = 'default'
9
- ) {
10
- const location = useLocation()
11
- const state = useContext(ScrollContext)
12
-
13
- useLayoutEffect(() => {
14
- if (!isInElectron) {
15
- const isStickyVal = isSticky()
16
- setTimeout(() => {
17
- const position = state.read(location, identifier)
18
- document.scrollingElement.scrollTo(0, isStickyVal ? StickyTop + 10 : position || 0)
19
- }, 10)
20
- }
21
- }, [location.key])
22
-
23
- useEffect(() => {
24
- const onScroll = () => {
25
- state.save(location, identifier, document.scrollingElement.scrollTop)
26
- }
27
- window.addEventListener('scroll', onScroll)
28
- return () => {
29
- window.removeEventListener('scroll', onScroll)
30
- }
31
- }, [])
32
- }
1
+ import { useContext, useLayoutEffect, useEffect } from 'react'
2
+ import { useLocation } from 'react-router-dom'
3
+ import { ScrollContext } from './scrollContext'
4
+ import { isSticky, StickyTop } from '@/util/stickyStatus'
5
+ import { isInElectron } from '@/util/env'
6
+
7
+ export function useScrollRestoration(
8
+ identifier = 'default'
9
+ ) {
10
+ const location = useLocation()
11
+ const state = useContext(ScrollContext)
12
+
13
+ useLayoutEffect(() => {
14
+ if (!isInElectron) {
15
+ const isStickyVal = isSticky()
16
+ setTimeout(() => {
17
+ const position = state.read(location, identifier)
18
+ document.scrollingElement.scrollTo(0, isStickyVal ? StickyTop + 10 : position || 0)
19
+ }, 10)
20
+ }
21
+ }, [location.key])
22
+
23
+ useEffect(() => {
24
+ const onScroll = () => {
25
+ state.save(location, identifier, document.scrollingElement.scrollTop)
26
+ }
27
+ window.addEventListener('scroll', onScroll)
28
+ return () => {
29
+ window.removeEventListener('scroll', onScroll)
30
+ }
31
+ }, [])
32
+ }
@@ -1,20 +1,20 @@
1
- import { createContext } from 'react'
2
-
3
- const ScrollCache = {}
4
-
5
- class SessionStorage {
6
- read(location, key) {
7
- const cacheKey = `${location}: ${key}`
8
- return ScrollCache[cacheKey]
9
- }
10
-
11
- save(location, key, value) {
12
- const cacheKey = `${location}: ${key}`
13
- ScrollCache[cacheKey] = value
14
- }
15
- }
16
-
17
- export const ScrollContext = createContext(
18
- new SessionStorage()
19
- )
20
- ScrollContext.displayName = 'ScrollContext'
1
+ import { createContext } from 'react'
2
+
3
+ const ScrollCache = {}
4
+
5
+ class SessionStorage {
6
+ read(location, key) {
7
+ const cacheKey = `${location}: ${key}`
8
+ return ScrollCache[cacheKey]
9
+ }
10
+
11
+ save(location, key, value) {
12
+ const cacheKey = `${location}: ${key}`
13
+ ScrollCache[cacheKey] = value
14
+ }
15
+ }
16
+
17
+ export const ScrollContext = createContext(
18
+ new SessionStorage()
19
+ )
20
+ ScrollContext.displayName = 'ScrollContext'
@@ -1,11 +1,11 @@
1
- import { useEffect, useRef } from 'react'
2
-
3
- export default function useTrackRef(data) {
4
- const dataRef = useRef(data)
5
-
6
- useEffect(() => {
7
- dataRef.current = data
8
- }, [data])
9
-
10
- return dataRef
11
- }
1
+ import { useEffect, useRef } from 'react'
2
+
3
+ export default function useTrackRef(data) {
4
+ const dataRef = useRef(data)
5
+
6
+ useEffect(() => {
7
+ dataRef.current = data
8
+ }, [data])
9
+
10
+ return dataRef
11
+ }
@@ -1,28 +1,28 @@
1
- const { useState, useEffect } = require('react')
2
-
3
- // Hook
4
- export default function useWindowSize() {
5
- // Initialize state with undefined width/height so server and client renders match
6
- // Learn more here: https://joshwcomeau.com/react/the-perils-of-rehydration/
7
- const [windowSize, setWindowSize] = useState({
8
- width: undefined,
9
- height: undefined
10
- })
11
- useEffect(() => {
12
- // Handler to call on window resize
13
- function handleResize() {
14
- // Set window width/height to state
15
- setWindowSize({
16
- width: window.innerWidth,
17
- height: window.innerHeight
18
- })
19
- }
20
- // Add event listener
21
- window.addEventListener('resize', handleResize)
22
- // Call handler right away so state gets updated with initial window size
23
- handleResize()
24
- // Remove event listener on cleanup
25
- return () => window.removeEventListener('resize', handleResize)
26
- }, []) // Empty array ensures that effect is only run on mount
27
- return windowSize
28
- }
1
+ const { useState, useEffect } = require('react')
2
+
3
+ // Hook
4
+ export default function useWindowSize() {
5
+ // Initialize state with undefined width/height so server and client renders match
6
+ // Learn more here: https://joshwcomeau.com/react/the-perils-of-rehydration/
7
+ const [windowSize, setWindowSize] = useState({
8
+ width: undefined,
9
+ height: undefined
10
+ })
11
+ useEffect(() => {
12
+ // Handler to call on window resize
13
+ function handleResize() {
14
+ // Set window width/height to state
15
+ setWindowSize({
16
+ width: window.innerWidth,
17
+ height: window.innerHeight
18
+ })
19
+ }
20
+ // Add event listener
21
+ window.addEventListener('resize', handleResize)
22
+ // Call handler right away so state gets updated with initial window size
23
+ handleResize()
24
+ // Remove event listener on cleanup
25
+ return () => window.removeEventListener('resize', handleResize)
26
+ }, []) // Empty array ensures that effect is only run on mount
27
+ return windowSize
28
+ }
@@ -1,47 +1,47 @@
1
- import { useEffect } from 'react'
2
-
3
- const MiniContentWitdh = 1368
4
-
5
- export default function useZoom() {
6
- useEffect(() => {
7
- zoomToViewPort()
8
- }, [])
9
- }
10
-
11
- function zoomToViewPort() {
12
- if (window.location.pathname === '/home') {
13
- const target = document.querySelector('.main')
14
- if (target) {
15
- const availWidth = window.innerWidth
16
- if (availWidth < MiniContentWitdh) {
17
- const scale = availWidth / MiniContentWitdh
18
- target.style.width = `${MiniContentWitdh}px`
19
- target.style.transform = `scale(${scale})`
20
- target.style.transformOrigin = '0 0'
21
- setTimeout(() => {
22
- const wrapTarget = document.querySelector('.main-wrapper')
23
- wrapTarget.style.height = `${window.screen.availHeight - 300}px`
24
- wrapTarget.addEventListener('scroll', () => {
25
- const maxHeight = target.getBoundingClientRect().height
26
- - wrapTarget.getBoundingClientRect().height
27
- if (wrapTarget.scrollTop >= maxHeight) {
28
- wrapTarget.scrollTop = maxHeight
29
- }
30
- })
31
- setInterval(() => {
32
- let n = 0
33
- const t = setInterval(() => {
34
- n += 1
35
- if (n < 8) {
36
- const h = wrapTarget.getBoundingClientRect().height
37
- window.parent.postMessage(h, '*')
38
- } else {
39
- clearInterval(t)
40
- }
41
- }, 300)
42
- }, 1000)
43
- }, 100)
44
- }
45
- }
46
- }
47
- }
1
+ import { useEffect } from 'react'
2
+
3
+ const MiniContentWitdh = 1368
4
+
5
+ export default function useZoom() {
6
+ useEffect(() => {
7
+ zoomToViewPort()
8
+ }, [])
9
+ }
10
+
11
+ function zoomToViewPort() {
12
+ if (window.location.pathname === '/home') {
13
+ const target = document.querySelector('.main')
14
+ if (target) {
15
+ const availWidth = window.innerWidth
16
+ if (availWidth < MiniContentWitdh) {
17
+ const scale = availWidth / MiniContentWitdh
18
+ target.style.width = `${MiniContentWitdh}px`
19
+ target.style.transform = `scale(${scale})`
20
+ target.style.transformOrigin = '0 0'
21
+ setTimeout(() => {
22
+ const wrapTarget = document.querySelector('.main-wrapper')
23
+ wrapTarget.style.height = `${window.screen.availHeight - 300}px`
24
+ wrapTarget.addEventListener('scroll', () => {
25
+ const maxHeight = target.getBoundingClientRect().height
26
+ - wrapTarget.getBoundingClientRect().height
27
+ if (wrapTarget.scrollTop >= maxHeight) {
28
+ wrapTarget.scrollTop = maxHeight
29
+ }
30
+ })
31
+ setInterval(() => {
32
+ let n = 0
33
+ const t = setInterval(() => {
34
+ n += 1
35
+ if (n < 8) {
36
+ const h = wrapTarget.getBoundingClientRect().height
37
+ window.parent.postMessage(h, '*')
38
+ } else {
39
+ clearInterval(t)
40
+ }
41
+ }, 300)
42
+ }, 1000)
43
+ }, 100)
44
+ }
45
+ }
46
+ }
47
+ }
package/src/index.js CHANGED
@@ -1,10 +1,10 @@
1
- import React from 'react'
2
- import { render } from 'react-dom'
3
-
4
- import Demo from './demo'
5
-
6
- // 测试页面内容
7
- render(
8
- <Demo />,
9
- document.querySelector('#root')
10
- )
1
+ import React from 'react'
2
+ import { render } from 'react-dom'
3
+
4
+ import Demo from './demo'
5
+
6
+ // 测试页面内容
7
+ render(
8
+ <Demo />,
9
+ document.querySelector('#root')
10
+ )
@@ -1,10 +1,10 @@
1
- import { getResourceLikesForLive } from '@/service/like'
2
-
3
- const ResourceType = 'open_live'
4
-
5
- export async function getLiveOnlineCount(liveId) {
6
- const likesData = await getResourceLikesForLive(liveId, ResourceType)
7
- const count = likesData?.open_live_count || 0
8
- const currentCount = count === 0 ? 1 : count
9
- return currentCount
10
- }
1
+ import { getResourceLikesForLive } from '@/service/like'
2
+
3
+ const ResourceType = 'open_live'
4
+
5
+ export async function getLiveOnlineCount(liveId) {
6
+ const likesData = await getResourceLikesForLive(liveId, ResourceType)
7
+ const count = likesData?.open_live_count || 0
8
+ const currentCount = count === 0 ? 1 : count
9
+ return currentCount
10
+ }
@@ -1,102 +1,102 @@
1
- import MutexLock from 'mutex-lock'
2
- import configCenterAPI from '@/config/request/config-center'
3
- import config from '@/config/env'
4
-
5
- const {
6
- app,
7
- env: defaultEnv
8
- } = config
9
- const LiveCache = {}
10
- const defaultSdpAppId = app.appid
11
-
12
- const useLocalDirectly = true // 不发请求,直接使用本地数据
13
- const localConfig = {
14
- 'x-cloud': {
15
- properties: {
16
- recommend_week: 'week_1', // 首页本周推荐(周数)
17
- live_close_login: '0', // 直播间登录验证降级配置(启用后所有人都以游客身份进入直播间,跳过UC鉴权),默认不启用
18
- live_record_random_delay_sec: 99, // 用于各端上报用户参与直播的随机离散时间
19
- download_url: ''
20
- }
21
- }
22
- }
23
-
24
- /**
25
- * 获取服务组件配置
26
- *
27
- * @param {string} sdpAppId
28
- * @param {string} serviceName 服务组件标识
29
- * @param {string?} env 环境
30
- */
31
- export default async function getServiceConfig(
32
- serviceName,
33
- sdpAppId = defaultSdpAppId,
34
- env = defaultEnv
35
- ) {
36
- if (useLocalDirectly) {
37
- return localConfig[serviceName]
38
- }
39
- const key = `ServiceConfig_${serviceName}_${sdpAppId}`
40
- const mutexLock = getMutexLock(key)
41
- const lockId = await mutexLock.request()
42
-
43
- const cacheData = loadFromCache(key)
44
- if (cacheData) {
45
- mutexLock.release(lockId)
46
- return cacheData
47
- }
48
- const url = `/configs/merge/config_type/service_component/format_code/${encodeURIComponent(serviceName)
49
- }/open_way/${encodeURIComponent(`${sdpAppId}||||`)}/public_configs/for_web`
50
-
51
- let data
52
- try {
53
- const result = await configCenterAPI.get(url, {
54
- headers: {
55
- 'x-config-dispatch-env': env
56
- }
57
- })
58
- data = result.data
59
- } catch (e) {
60
- mutexLock.release(lockId)
61
- throw e
62
- }
63
-
64
- // const ttl = data.ttl || 3600
65
- const ttl = 900 // 登录降级产品配置需求调整为 15 分钟,服务端也有 1 小时缓存
66
- data.expire = new Date().getTime() + ttl * 1000
67
- LiveCache[key] = data
68
- window.localStorage.setItem(key, JSON.stringify(data))
69
- mutexLock.release(lockId)
70
- return data
71
- }
72
-
73
- function loadFromCache(key) {
74
- if (LiveCache[key]) {
75
- return LiveCache[key]
76
- }
77
- const cacheStr = window.localStorage.getItem(key)
78
- let cacheData
79
- try {
80
- cacheData = JSON.parse(cacheStr)
81
- } catch (e) {
82
- return null
83
- }
84
-
85
- if (cacheData) {
86
- const expire = cacheData.expire || 0
87
- if (expire > new Date().getTime()) {
88
- return cacheData
89
- }
90
- }
91
- }
92
-
93
- /**
94
- * 根据key给与不同的同步锁
95
- */
96
- const Lock = {}
97
- function getMutexLock(key) {
98
- if (!Lock[key]) {
99
- Lock[key] = new MutexLock()
100
- }
101
- return Lock[key]
102
- }
1
+ import MutexLock from 'mutex-lock'
2
+ import configCenterAPI from '@/config/request/config-center'
3
+ import config from '@/config/env'
4
+
5
+ const {
6
+ app,
7
+ env: defaultEnv
8
+ } = config
9
+ const LiveCache = {}
10
+ const defaultSdpAppId = app.appid
11
+
12
+ const useLocalDirectly = true // 不发请求,直接使用本地数据
13
+ const localConfig = {
14
+ 'x-cloud': {
15
+ properties: {
16
+ recommend_week: 'week_1', // 首页本周推荐(周数)
17
+ live_close_login: '0', // 直播间登录验证降级配置(启用后所有人都以游客身份进入直播间,跳过UC鉴权),默认不启用
18
+ live_record_random_delay_sec: 99, // 用于各端上报用户参与直播的随机离散时间
19
+ download_url: ''
20
+ }
21
+ }
22
+ }
23
+
24
+ /**
25
+ * 获取服务组件配置
26
+ *
27
+ * @param {string} sdpAppId
28
+ * @param {string} serviceName 服务组件标识
29
+ * @param {string?} env 环境
30
+ */
31
+ export default async function getServiceConfig(
32
+ serviceName,
33
+ sdpAppId = defaultSdpAppId,
34
+ env = defaultEnv
35
+ ) {
36
+ if (useLocalDirectly) {
37
+ return localConfig[serviceName]
38
+ }
39
+ const key = `ServiceConfig_${serviceName}_${sdpAppId}`
40
+ const mutexLock = getMutexLock(key)
41
+ const lockId = await mutexLock.request()
42
+
43
+ const cacheData = loadFromCache(key)
44
+ if (cacheData) {
45
+ mutexLock.release(lockId)
46
+ return cacheData
47
+ }
48
+ const url = `/configs/merge/config_type/service_component/format_code/${encodeURIComponent(serviceName)
49
+ }/open_way/${encodeURIComponent(`${sdpAppId}||||`)}/public_configs/for_web`
50
+
51
+ let data
52
+ try {
53
+ const result = await configCenterAPI.get(url, {
54
+ headers: {
55
+ 'x-config-dispatch-env': env
56
+ }
57
+ })
58
+ data = result.data
59
+ } catch (e) {
60
+ mutexLock.release(lockId)
61
+ throw e
62
+ }
63
+
64
+ // const ttl = data.ttl || 3600
65
+ const ttl = 900 // 登录降级产品配置需求调整为 15 分钟,服务端也有 1 小时缓存
66
+ data.expire = new Date().getTime() + ttl * 1000
67
+ LiveCache[key] = data
68
+ window.localStorage.setItem(key, JSON.stringify(data))
69
+ mutexLock.release(lockId)
70
+ return data
71
+ }
72
+
73
+ function loadFromCache(key) {
74
+ if (LiveCache[key]) {
75
+ return LiveCache[key]
76
+ }
77
+ const cacheStr = window.localStorage.getItem(key)
78
+ let cacheData
79
+ try {
80
+ cacheData = JSON.parse(cacheStr)
81
+ } catch (e) {
82
+ return null
83
+ }
84
+
85
+ if (cacheData) {
86
+ const expire = cacheData.expire || 0
87
+ if (expire > new Date().getTime()) {
88
+ return cacheData
89
+ }
90
+ }
91
+ }
92
+
93
+ /**
94
+ * 根据key给与不同的同步锁
95
+ */
96
+ const Lock = {}
97
+ function getMutexLock(key) {
98
+ if (!Lock[key]) {
99
+ Lock[key] = new MutexLock()
100
+ }
101
+ return Lock[key]
102
+ }
@@ -1,20 +1,20 @@
1
- import React from 'react'
2
- import classNames from 'classnames'
3
-
4
- import style from './index.module.less'
5
-
6
- export default function Empty({
7
- tip = '暂无内容',
8
- className
9
- }) {
10
- return (
11
- <div className={classNames(style['empty-wrap'], className)}>
12
- <div className={style['img-wrap']}>
13
- <div>
14
- <img src={require('./img/empty.png')} alt="" />
15
- </div>
16
- <div className={style.tip}>{tip}</div>
17
- </div>
18
- </div>
19
- )
20
- }
1
+ import React from 'react'
2
+ import classNames from 'classnames'
3
+
4
+ import style from './index.module.less'
5
+
6
+ export default function Empty({
7
+ tip = '暂无内容',
8
+ className
9
+ }) {
10
+ return (
11
+ <div className={classNames(style['empty-wrap'], className)}>
12
+ <div className={style['img-wrap']}>
13
+ <div>
14
+ <img src={require('./img/empty.png')} alt="" />
15
+ </div>
16
+ <div className={style.tip}>{tip}</div>
17
+ </div>
18
+ </div>
19
+ )
20
+ }
@@ -1,23 +1,23 @@
1
- .empty-wrap {
2
- margin-top: 100px;
3
-
4
- .img-wrap {
5
- padding: 16px;
6
- display: flex;
7
- align-items: center;
8
- justify-content: center;
9
- flex-direction: column;
10
-
11
- img {
12
- width: 260px;
13
- height: 182px;
14
- }
15
- }
16
-
17
- .tip {
18
- font-size: 16px;
19
- color: #666;
20
- line-height: 24px;
21
- margin-top: 32px;
22
- }
23
- }
1
+ .empty-wrap {
2
+ margin-top: 100px;
3
+
4
+ .img-wrap {
5
+ padding: 16px;
6
+ display: flex;
7
+ align-items: center;
8
+ justify-content: center;
9
+ flex-direction: column;
10
+
11
+ img {
12
+ width: 260px;
13
+ height: 182px;
14
+ }
15
+ }
16
+
17
+ .tip {
18
+ font-size: 16px;
19
+ color: #666;
20
+ line-height: 24px;
21
+ margin-top: 32px;
22
+ }
23
+ }