@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,202 +1,202 @@
1
- /* eslint-disable no-nested-ternary */
2
- import React, { useState } from 'react'
3
- import dayjs from 'dayjs'
4
- import { Icon, Spin } from 'fish'
5
- import { PROVIDE_RECORD, PUBLIC_LIVE_STATUS, VIEW_REPLAY, PUBLIC_LIVE_MODE } from '@/config/publicLive'
6
- import LiveCountDown from '../LiveCountDown'
7
- import style from './index.module.less'
8
- import AnchorOnTheWay from './AnchorOnTheWay'
9
-
10
- function LiveStatus({
11
- isStreamLive,
12
- handleLogin,
13
- userInfo,
14
- liveInfo,
15
- hasPlayed,
16
- visitTime,
17
- isLiveException, // 拉流异常
18
- isLiveLoading,
19
- isLiveLoadError, // 视频加载失败
20
- onStatusChange = () => undefined,
21
- onPlayReplay = () => undefined,
22
- onReloadLive = () => undefined
23
- }) {
24
- // 调试代码 模拟倒计时2S
25
- // const [countDownTime, setCountDownTime] = useState(2000)
26
-
27
- const [countDownTime, setCountDownTime] = useState(dayjs(liveInfo.begin_time).valueOf() - visitTime)
28
- const isNoStarted = liveInfo.status === PUBLIC_LIVE_STATUS.NOSTARTED
29
- const isLiving = liveInfo.status === PUBLIC_LIVE_STATUS.LIVEING
30
- const isCompleted = liveInfo.status === PUBLIC_LIVE_STATUS.COMPLETEED
31
- const isPaused = liveInfo.status === PUBLIC_LIVE_STATUS.PASUED
32
- const isOffline = liveInfo.status === PUBLIC_LIVE_STATUS.OFFLINE
33
- const isRecordLive = liveInfo.type === PUBLIC_LIVE_MODE.RECORDED
34
-
35
- // 当前时间是否在回放时间开始前, 如果没有回放开始时间, 则直接判断未回放还没生成
36
- const isBeforeRecordTime = liveInfo.replay_begin_time
37
- ? dayjs().isBefore(dayjs(liveInfo.replay_begin_time))
38
- : true
39
-
40
- const mustLogin = !userInfo && liveInfo.login
41
- const canLiveStart = isLiving && !mustLogin
42
- const hasReplayBtn = isCompleted && liveInfo.view_replay === VIEW_REPLAY.ALLOW && liveInfo.provide_record !== PROVIDE_RECORD.NOT_PROVIDED
43
- const hasLoginBtn = mustLogin && (isNoStarted || isLiving)
44
- const coverBgStyle = {
45
- backgroundImage: `url("${liveInfo.cover_pic_web_url}")`
46
- }
47
-
48
- const startLiving = () => {
49
- if (isRecordLive || isStreamLive) {
50
- setCountDownTime(0)
51
- onStatusChange(PUBLIC_LIVE_STATUS.LIVEING, {
52
- play: !mustLogin
53
- })
54
- } else {
55
- setCountDownTime(0)
56
- }
57
- }
58
-
59
- const handleViewReplay = () => {
60
- if (mustLogin) {
61
- handleLogin()
62
- } else {
63
- onPlayReplay()
64
- }
65
- }
66
- // 播放状态
67
- if (canLiveStart) {
68
- if (!isLiveException && !isLiveLoading && !isLiveLoadError) {
69
- return <></>
70
- }
71
- return (
72
- <>
73
- <div className={style['live-status-wrapper']}>
74
- <div className={style['live-status']}>
75
- {
76
- isLiveException
77
- ? (
78
- <AnchorOnTheWay
79
- liveInfo={liveInfo}
80
- isStreamLive={isStreamLive}
81
- hasPlayed={hasPlayed}
82
- reload={onReloadLive}
83
- onStatusChange={onStatusChange}
84
- />
85
- )
86
- : isLiveLoadError
87
- ? (
88
- <>
89
- <div className={style['status-load-error']}>
90
- <Icon type="exclamation-circle" className={style.icon} />
91
- <div className={style.text}>加载失败,请重试</div>
92
- </div>
93
- <button className={style['primary-btn']} onClick={onReloadLive}>重试</button>
94
- </>
95
- )
96
- : isLiveLoading
97
- ? (
98
- <div className={style['status-living-loading']}>
99
- <Spin indicator={(
100
- <Icon type="loading" spin className={style.icon} />
101
- )}
102
- />
103
- <div className={style.text}>加载中...</div>
104
- </div>
105
- )
106
- : (<></>)
107
- }
108
- </div>
109
- </div>
110
- {!isRecordLive && (isLiveLoadError || isLiveException) && (
111
- <div
112
- className={style['video-poster']}
113
- style={coverBgStyle}
114
- />
115
- )}
116
- </>
117
- )
118
- }
119
-
120
- return (
121
- <>
122
- <div className={style['live-status-wrapper']}>
123
- <div className={style['live-status']}>
124
- {isNoStarted && (countDownTime > 0 ? (
125
- <LiveCountDown
126
- liveInfo={liveInfo}
127
- isStreamLive={isStreamLive}
128
- time={countDownTime}
129
- reload={onReloadLive}
130
- onEnd={startLiving}
131
- />
132
- ) : (
133
- <AnchorOnTheWay
134
- liveInfo={liveInfo}
135
- isStreamLive={isStreamLive}
136
- hasPlayed={hasPlayed}
137
- reload={onReloadLive}
138
- onStatusChange={onStatusChange}
139
- />
140
- ))}
141
- {isLiving && (
142
- <div className={style['status-living']}>
143
- <div className={style.icon}>
144
- <div />
145
- <div />
146
- <div />
147
- </div>
148
- <div className={style.text}>开播中</div>
149
- </div>
150
- )}
151
- {isCompleted && (
152
- <div className={style['status-completed']}>
153
- <div className={style.icon} />
154
- <div className={style.text}>已结束</div>
155
- </div>
156
- )}
157
- {isPaused && (
158
- <AnchorOnTheWay
159
- liveInfo={liveInfo}
160
- isStreamLive={isStreamLive}
161
- hasPlayed={hasPlayed}
162
- reload={onReloadLive}
163
- onStatusChange={onStatusChange}
164
- />
165
- )}
166
- {isOffline && (
167
- <div className={style['status-offline']}>
168
- <Icon type="exclamation-circle" className={style.icon} />
169
- <div className={style.text}>已下架</div>
170
- </div>
171
- )}
172
- {hasLoginBtn && (
173
- <button
174
- className={style['primary-btn']}
175
- onClick={handleLogin}
176
- >
177
- 请登录查看
178
- </button>
179
- )}
180
- {hasReplayBtn && liveInfo.replay_url && (
181
- <button
182
- className={style['primary-btn']}
183
- onClick={handleViewReplay}
184
- >
185
- {mustLogin ? '登录观看回放' : '观看回放'}
186
- </button>
187
- )}
188
- {hasReplayBtn && !liveInfo.replay_url && isBeforeRecordTime && (
189
- <div className={style['replay-encoding']}>
190
- 回放生成中,请稍后再来...
191
- </div>
192
- )}
193
- </div>
194
- </div>
195
- {!isRecordLive && (!isLiving || (isLiving && mustLogin)) && (
196
- <div className={style['video-poster']} style={coverBgStyle} />
197
- )}
198
- </>
199
- )
200
- }
201
-
202
- export default LiveStatus
1
+ /* eslint-disable no-nested-ternary */
2
+ import React, { useState } from 'react'
3
+ import dayjs from 'dayjs'
4
+ import { Icon, Spin } from 'fish'
5
+ import { PROVIDE_RECORD, PUBLIC_LIVE_STATUS, VIEW_REPLAY, PUBLIC_LIVE_MODE } from '@/config/publicLive'
6
+ import LiveCountDown from '../LiveCountDown'
7
+ import style from './index.module.less'
8
+ import AnchorOnTheWay from './AnchorOnTheWay'
9
+
10
+ function LiveStatus({
11
+ isStreamLive,
12
+ handleLogin,
13
+ userInfo,
14
+ liveInfo,
15
+ hasPlayed,
16
+ visitTime,
17
+ isLiveException, // 拉流异常
18
+ isLiveLoading,
19
+ isLiveLoadError, // 视频加载失败
20
+ onStatusChange = () => undefined,
21
+ onPlayReplay = () => undefined,
22
+ onReloadLive = () => undefined
23
+ }) {
24
+ // 调试代码 模拟倒计时2S
25
+ // const [countDownTime, setCountDownTime] = useState(2000)
26
+
27
+ const [countDownTime, setCountDownTime] = useState(dayjs(liveInfo.begin_time).valueOf() - visitTime)
28
+ const isNoStarted = liveInfo.status === PUBLIC_LIVE_STATUS.NOSTARTED
29
+ const isLiving = liveInfo.status === PUBLIC_LIVE_STATUS.LIVEING
30
+ const isCompleted = liveInfo.status === PUBLIC_LIVE_STATUS.COMPLETEED
31
+ const isPaused = liveInfo.status === PUBLIC_LIVE_STATUS.PASUED
32
+ const isOffline = liveInfo.status === PUBLIC_LIVE_STATUS.OFFLINE
33
+ const isRecordLive = liveInfo.type === PUBLIC_LIVE_MODE.RECORDED
34
+
35
+ // 当前时间是否在回放时间开始前, 如果没有回放开始时间, 则直接判断未回放还没生成
36
+ const isBeforeRecordTime = liveInfo.replay_begin_time
37
+ ? dayjs().isBefore(dayjs(liveInfo.replay_begin_time))
38
+ : true
39
+
40
+ const mustLogin = !userInfo && liveInfo.login
41
+ const canLiveStart = isLiving && !mustLogin
42
+ const hasReplayBtn = isCompleted && liveInfo.view_replay === VIEW_REPLAY.ALLOW && liveInfo.provide_record !== PROVIDE_RECORD.NOT_PROVIDED
43
+ const hasLoginBtn = mustLogin && (isNoStarted || isLiving)
44
+ const coverBgStyle = {
45
+ backgroundImage: `url("${liveInfo.cover_pic_web_url}")`
46
+ }
47
+
48
+ const startLiving = () => {
49
+ if (isRecordLive || isStreamLive) {
50
+ setCountDownTime(0)
51
+ onStatusChange(PUBLIC_LIVE_STATUS.LIVEING, {
52
+ play: !mustLogin
53
+ })
54
+ } else {
55
+ setCountDownTime(0)
56
+ }
57
+ }
58
+
59
+ const handleViewReplay = () => {
60
+ if (mustLogin) {
61
+ handleLogin()
62
+ } else {
63
+ onPlayReplay()
64
+ }
65
+ }
66
+ // 播放状态
67
+ if (canLiveStart) {
68
+ if (!isLiveException && !isLiveLoading && !isLiveLoadError) {
69
+ return <></>
70
+ }
71
+ return (
72
+ <>
73
+ <div className={style['live-status-wrapper']}>
74
+ <div className={style['live-status']}>
75
+ {
76
+ isLiveException
77
+ ? (
78
+ <AnchorOnTheWay
79
+ liveInfo={liveInfo}
80
+ isStreamLive={isStreamLive}
81
+ hasPlayed={hasPlayed}
82
+ reload={onReloadLive}
83
+ onStatusChange={onStatusChange}
84
+ />
85
+ )
86
+ : isLiveLoadError
87
+ ? (
88
+ <>
89
+ <div className={style['status-load-error']}>
90
+ <Icon type="exclamation-circle" className={style.icon} />
91
+ <div className={style.text}>加载失败,请重试</div>
92
+ </div>
93
+ <button className={style['primary-btn']} onClick={onReloadLive}>重试</button>
94
+ </>
95
+ )
96
+ : isLiveLoading
97
+ ? (
98
+ <div className={style['status-living-loading']}>
99
+ <Spin indicator={(
100
+ <Icon type="loading" spin className={style.icon} />
101
+ )}
102
+ />
103
+ <div className={style.text}>加载中...</div>
104
+ </div>
105
+ )
106
+ : (<></>)
107
+ }
108
+ </div>
109
+ </div>
110
+ {!isRecordLive && (isLiveLoadError || isLiveException) && (
111
+ <div
112
+ className={style['video-poster']}
113
+ style={coverBgStyle}
114
+ />
115
+ )}
116
+ </>
117
+ )
118
+ }
119
+
120
+ return (
121
+ <>
122
+ <div className={style['live-status-wrapper']}>
123
+ <div className={style['live-status']}>
124
+ {isNoStarted && (countDownTime > 0 ? (
125
+ <LiveCountDown
126
+ liveInfo={liveInfo}
127
+ isStreamLive={isStreamLive}
128
+ time={countDownTime}
129
+ reload={onReloadLive}
130
+ onEnd={startLiving}
131
+ />
132
+ ) : (
133
+ <AnchorOnTheWay
134
+ liveInfo={liveInfo}
135
+ isStreamLive={isStreamLive}
136
+ hasPlayed={hasPlayed}
137
+ reload={onReloadLive}
138
+ onStatusChange={onStatusChange}
139
+ />
140
+ ))}
141
+ {isLiving && (
142
+ <div className={style['status-living']}>
143
+ <div className={style.icon}>
144
+ <div />
145
+ <div />
146
+ <div />
147
+ </div>
148
+ <div className={style.text}>开播中</div>
149
+ </div>
150
+ )}
151
+ {isCompleted && (
152
+ <div className={style['status-completed']}>
153
+ <div className={style.icon} />
154
+ <div className={style.text}>已结束</div>
155
+ </div>
156
+ )}
157
+ {isPaused && (
158
+ <AnchorOnTheWay
159
+ liveInfo={liveInfo}
160
+ isStreamLive={isStreamLive}
161
+ hasPlayed={hasPlayed}
162
+ reload={onReloadLive}
163
+ onStatusChange={onStatusChange}
164
+ />
165
+ )}
166
+ {isOffline && (
167
+ <div className={style['status-offline']}>
168
+ <Icon type="exclamation-circle" className={style.icon} />
169
+ <div className={style.text}>已下架</div>
170
+ </div>
171
+ )}
172
+ {hasLoginBtn && (
173
+ <button
174
+ className={style['primary-btn']}
175
+ onClick={handleLogin}
176
+ >
177
+ 请登录查看
178
+ </button>
179
+ )}
180
+ {hasReplayBtn && liveInfo.replay_url && (
181
+ <button
182
+ className={style['primary-btn']}
183
+ onClick={handleViewReplay}
184
+ >
185
+ {mustLogin ? '登录观看回放' : '观看回放'}
186
+ </button>
187
+ )}
188
+ {hasReplayBtn && !liveInfo.replay_url && isBeforeRecordTime && (
189
+ <div className={style['replay-encoding']}>
190
+ 回放生成中,请稍后再来...
191
+ </div>
192
+ )}
193
+ </div>
194
+ </div>
195
+ {!isRecordLive && (!isLiving || (isLiving && mustLogin)) && (
196
+ <div className={style['video-poster']} style={coverBgStyle} />
197
+ )}
198
+ </>
199
+ )
200
+ }
201
+
202
+ export default LiveStatus