@x-edu/live-player 0.0.21 → 0.0.23

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 (299) 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/doc/develop.md +23 -23
  9. package/gem-mine.config.js +86 -86
  10. package/jest.config.js +9 -9
  11. package/jsconfig.json +15 -15
  12. package/mock/helper.js +8 -8
  13. package/mock/index.js +34 -34
  14. package/package.json +99 -99
  15. package/public/3rd/ali-player/alipayercomponents-1.0.8.min.js +26 -26
  16. package/public/3rd/ali-player/aliplayer-hls-min.js +27 -27
  17. package/public/3rd/ali-player/aliplayer-min.js +1 -1
  18. package/public/3rd/im-web-push/index.umd.js +14 -14
  19. package/public/JsBridge.js +1602 -1602
  20. package/public/fish/editor/themes/default/css/ueditor.css +1905 -1905
  21. package/public/fish/editor/third-party/codemirror/codemirror.css +104 -104
  22. package/public/fish/editor/third-party/codemirror/codemirror.js +3581 -3581
  23. package/public/fish/editor/third-party/zeroclipboard/ZeroClipboard.js +1255 -1255
  24. package/public/fish/editor/ueditor.all.min.js +16 -16
  25. package/public/fish/editor/ueditor.config.js +467 -467
  26. package/public/fish/icon/umd-4.1.2.js +1 -1
  27. package/public/fish/video/videoplayer.min.css +6 -6
  28. package/public/fish/video/videoplayer.min.js +31 -31
  29. package/public/fish/video/zh-CN.js +82 -82
  30. package/public/icon/demo.css +539 -539
  31. package/public/icon/demo_index.html +2189 -2189
  32. package/public/icon/iconfont.css +363 -363
  33. package/public/icon/iconfont.json +618 -618
  34. package/public/index.html +50 -50
  35. package/script/image/readme.md +77 -77
  36. package/script/postcss.js +48 -48
  37. package/src/App.jsx +24 -24
  38. package/src/asset/img/course/playing.svg +21 -21
  39. package/src/asset/img/icon-course-white.svg +3 -3
  40. package/src/asset/img/icon-course.svg +3 -3
  41. package/src/asset/img/icon-eye-white.svg +4 -4
  42. package/src/asset/img/icon-eye.svg +4 -4
  43. package/src/asset/img/icon-school-white.svg +3 -3
  44. package/src/asset/img/icon-school.svg +3 -3
  45. package/src/asset/img/loading.svg +52 -52
  46. package/src/asset/img/video-play.svg +6 -6
  47. package/src/asset/style/background.less +19 -19
  48. package/src/asset/style/banner.less +36 -36
  49. package/src/asset/style/base.less +74 -74
  50. package/src/asset/style/index.less +114 -114
  51. package/src/asset/style/reset-theme.less +141 -141
  52. package/src/asset/style/theme/index.less +55 -55
  53. package/src/asset/style/theme/party/global.less +20 -20
  54. package/src/asset/style/theme/party/override.less +57 -57
  55. package/src/asset/style/theme/test/global.less +18 -18
  56. package/src/asset/style/theme/test/override.less +45 -45
  57. package/src/asset/style/variable.less +12 -12
  58. package/src/component/AliPlayer/index.jsx +49 -49
  59. package/src/component/Avatar/index.jsx +50 -50
  60. package/src/component/Empty/index.jsx +34 -34
  61. package/src/component/Empty/index.module.less +37 -37
  62. package/src/component/IMChatroom/component/status/403.jsx +13 -13
  63. package/src/component/IMChatroom/component/status/404.jsx +13 -13
  64. package/src/component/IMChatroom/component/status/Error.jsx +23 -23
  65. package/src/component/IMChatroom/component/status/Loading.jsx +5 -5
  66. package/src/component/IMChatroom/config/app/config.js +118 -118
  67. package/src/component/IMChatroom/config/app/index.js +60 -60
  68. package/src/component/IMChatroom/config/env.js +5 -5
  69. package/src/component/IMChatroom/config/index.js +3 -3
  70. package/src/component/IMChatroom/config/request/config/base.js +124 -124
  71. package/src/component/IMChatroom/config/request/config/chatroom.js +26 -26
  72. package/src/component/IMChatroom/config/request/config/imCoreApi.js +21 -21
  73. package/src/component/IMChatroom/config/request/index.js +21 -21
  74. package/src/component/IMChatroom/config/request/proxy.js +39 -39
  75. package/src/component/IMChatroom/config/url.js +7 -7
  76. package/src/component/IMChatroom/constants/errorCode.js +9 -9
  77. package/src/component/IMChatroom/constants/index.js +84 -84
  78. package/src/component/IMChatroom/constants/origin.js +27 -27
  79. package/src/component/IMChatroom/context/chatroom.js +154 -154
  80. package/src/component/IMChatroom/context/connect.js +28 -28
  81. package/src/component/IMChatroom/i18n/en/index.json +73 -73
  82. package/src/component/IMChatroom/i18n/index.jsx +14 -14
  83. package/src/component/IMChatroom/i18n/language.js +9 -9
  84. package/src/component/IMChatroom/i18n/zh-CN/index.json +73 -73
  85. package/src/component/IMChatroom/index.jsx +49 -49
  86. package/src/component/IMChatroom/page/chat/index.jsx +27 -27
  87. package/src/component/IMChatroom/page/chat/messageEditor/index.jsx +375 -375
  88. package/src/component/IMChatroom/page/chat/messageList/index.jsx +354 -354
  89. package/src/component/IMChatroom/page/chat/stickedMessage/index.jsx +59 -59
  90. package/src/component/IMChatroom/page/chat/stickedMessage/style/index.module.less +7 -7
  91. package/src/component/IMChatroom/page/chat/style/index.module.less +51 -51
  92. package/src/component/IMChatroom/page/home/connect/index.jsx +188 -188
  93. package/src/component/IMChatroom/page/home/connect/status.jsx +124 -124
  94. package/src/component/IMChatroom/page/home/context/cmd.jsx +37 -37
  95. package/src/component/IMChatroom/page/home/context/index.jsx +67 -67
  96. package/src/component/IMChatroom/page/home/index.jsx +164 -164
  97. package/src/component/IMChatroom/page/home/notice/index.jsx +123 -123
  98. package/src/component/IMChatroom/page/home/notice/style/index.module.less +49 -49
  99. package/src/component/IMChatroom/page/home/style/index.module.less +110 -110
  100. package/src/component/IMChatroom/page/member/index.jsx +15 -15
  101. package/src/component/IMChatroom/page/member/memberCount/index.jsx +44 -44
  102. package/src/component/IMChatroom/page/member/memberList/index.jsx +121 -121
  103. package/src/component/IMChatroom/page/member/style/index.module.less +2 -2
  104. package/src/component/IMChatroom/sdk/bridge.js +39 -39
  105. package/src/component/IMChatroom/sdk/cs/constants.js +20 -20
  106. package/src/component/IMChatroom/sdk/cs/index.js +101 -101
  107. package/src/component/IMChatroom/sdk/imChatroom.js +15 -15
  108. package/src/component/IMChatroom/sdk/imcore/constants.js +128 -128
  109. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomDestroyed.js +5 -5
  110. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomInfoGetFail.js +5 -5
  111. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomKickedByAdmin.js +5 -5
  112. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomKickedBySelf.js +5 -5
  113. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomLoginFail.js +5 -5
  114. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomLoginSuccess.js +5 -5
  115. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomMemberLogin.js +5 -5
  116. package/src/component/IMChatroom/sdk/imcore/emitters/chatroomMemberLogout.js +5 -5
  117. package/src/component/IMChatroom/sdk/imcore/emitters/connectionConnected.js +5 -5
  118. package/src/component/IMChatroom/sdk/imcore/emitters/connectionConnecting.js +5 -5
  119. package/src/component/IMChatroom/sdk/imcore/emitters/connectionDisconnect.js +5 -5
  120. package/src/component/IMChatroom/sdk/imcore/emitters/index.js +57 -57
  121. package/src/component/IMChatroom/sdk/imcore/emitters/messageReceive.js +36 -36
  122. package/src/component/IMChatroom/sdk/imcore/index.js +178 -178
  123. package/src/component/IMChatroom/sdk/imcore/interceptors/request.js +7 -7
  124. package/src/component/IMChatroom/sdk/imcore/interceptors/response.js +5 -5
  125. package/src/component/IMChatroom/sdk/imcore/plugins/getAuth.js +64 -64
  126. package/src/component/IMChatroom/sdk/imcore/plugins/getConversationId.js +20 -20
  127. package/src/component/IMChatroom/sdk/imcore/plugins/getExtInfo.js +10 -10
  128. package/src/component/IMChatroom/sdk/imcore/plugins/getLoginInfo.js +48 -48
  129. package/src/component/IMChatroom/sdk/imcore/plugins/getPlatformType.js +12 -12
  130. package/src/component/IMChatroom/sdk/imcore/plugins/index.js +22 -22
  131. package/src/component/IMChatroom/sdk/imcore/util/format.js +177 -177
  132. package/src/component/IMChatroom/sdk/imcore/util/parser.js +35 -35
  133. package/src/component/IMChatroom/sdk/oms.js +18 -18
  134. package/src/component/IMChatroom/sdk/uc.js +3 -3
  135. package/src/component/IMChatroom/subscription/channel/app.js +5 -5
  136. package/src/component/IMChatroom/subscription/channel/ctl.js +22 -22
  137. package/src/component/IMChatroom/subscription/channel/member.js +40 -40
  138. package/src/component/IMChatroom/subscription/channel/message.js +13 -13
  139. package/src/component/IMChatroom/subscription/channel/ntf.js +86 -86
  140. package/src/component/IMChatroom/subscription/channel/tel.js +5 -5
  141. package/src/component/IMChatroom/subscription/channel/websocket.js +5 -5
  142. package/src/component/IMChatroom/subscription/event.js +37 -37
  143. package/src/component/IMChatroom/subscription/index.js +19 -19
  144. package/src/component/IMChatroom/util/account.js +8 -8
  145. package/src/component/IMChatroom/util/chatroom.js +255 -255
  146. package/src/component/IMChatroom/util/jsonBigInt.js +5 -5
  147. package/src/component/IMChatroom/util/location.js +12 -12
  148. package/src/component/Icon/index.jsx +16 -16
  149. package/src/component/Icon/index.module.less +2 -2
  150. package/src/component/Pagination/LocalPagination.jsx +27 -27
  151. package/src/component/Pagination/RemotePagination.jsx +32 -32
  152. package/src/component/Pagination/index.jsx +32 -31
  153. package/src/component/Pagination/index.module.less +117 -110
  154. package/src/component/PlayerTip/index.jsx +34 -34
  155. package/src/component/VideoBase/index.jsx +242 -242
  156. package/src/component/VideoBase/style.less +65 -65
  157. package/src/component/VideoBase/utils.js +81 -81
  158. package/src/component/mixin.less +9 -9
  159. package/src/component/status/403.jsx +15 -15
  160. package/src/component/status/404/index.jsx +73 -73
  161. package/src/component/status/404/index.module.less +36 -36
  162. package/src/component/status/Error/error.module.less +13 -13
  163. package/src/component/status/Error/index.jsx +47 -47
  164. package/src/component/status/Loading/img/loading.svg +52 -52
  165. package/src/component/status/Loading/index.jsx +31 -31
  166. package/src/component/status/Loading/index.less +56 -56
  167. package/src/component/status/None/index.jsx +20 -20
  168. package/src/component/status/None/index.module.less +35 -35
  169. package/src/component/status/Status/index.jsx +26 -26
  170. package/src/component/status/Status/index.module.less +8 -8
  171. package/src/config/constant/commonUrl.js +2 -2
  172. package/src/config/constant/user.js +6 -6
  173. package/src/config/context/site-config.js +48 -48
  174. package/src/config/env/index.js +5 -5
  175. package/src/config/env/local/index.js +13 -13
  176. package/src/config/env/ncet-xedu/api.js +175 -175
  177. package/src/config/env/ncet-xedu/app.js +12 -12
  178. package/src/config/env/ncet-xedu/cs.js +8 -8
  179. package/src/config/env/ncet-xedu/index.js +14 -14
  180. package/src/config/env/ncet-xedu/push.js +5 -5
  181. package/src/config/env/preproduction/api.js +144 -144
  182. package/src/config/env/preproduction/app.js +12 -12
  183. package/src/config/env/preproduction/cs.js +8 -8
  184. package/src/config/env/preproduction/index.js +14 -14
  185. package/src/config/env/preproduction/push.js +5 -5
  186. package/src/config/env/product/api.js +113 -113
  187. package/src/config/env/product/app.js +12 -12
  188. package/src/config/env/product/cs.js +5 -5
  189. package/src/config/env/product/index.js +14 -14
  190. package/src/config/env/product/push.js +5 -5
  191. package/src/config/live.js +80 -80
  192. package/src/config/publicLive.js +53 -53
  193. package/src/config/request/assessments.js +24 -24
  194. package/src/config/request/config-center.js +8 -8
  195. package/src/config/request/helper.js +166 -166
  196. package/src/config/request/im-broadcasts.js +12 -12
  197. package/src/config/request/live-activity-gateway.js +8 -8
  198. package/src/config/request/live-activity.js +13 -13
  199. package/src/config/request/raw.js +6 -6
  200. package/src/config/request/x-cloud-web.js +13 -13
  201. package/src/config/request/x-proxy.js +34 -34
  202. package/src/demo/Detail.jsx +11 -11
  203. package/src/demo/List.jsx +66 -64
  204. package/src/demo/index.jsx +17 -17
  205. package/src/detail/LineSwitch/index.jsx +71 -71
  206. package/src/detail/LiveCountDown/index.jsx +44 -44
  207. package/src/detail/LiveCountDown/index.module.less +31 -31
  208. package/src/detail/LiveOnlineCount/img/icon.svg +15 -15
  209. package/src/detail/LiveOnlineCount/index.jsx +68 -68
  210. package/src/detail/LiveOnlineCount/index.module.less +34 -34
  211. package/src/detail/LiveOnlineCount/util.js +74 -74
  212. package/src/detail/LiveStatus/AnchorOnTheWay.jsx +88 -88
  213. package/src/detail/LiveStatus/index.jsx +202 -202
  214. package/src/detail/LiveStatus/index.module.less +192 -192
  215. package/src/detail/LiveVideo/config.js +37 -37
  216. package/src/detail/LiveVideo/index.jsx +188 -188
  217. package/src/detail/LiveVideo/index.module.less +41 -41
  218. package/src/detail/NotLoginChatroom/index.jsx +37 -37
  219. package/src/detail/NotLoginChatroom/index.module.less +46 -46
  220. package/src/detail/RecordVideo/index.jsx +150 -150
  221. package/src/detail/RecordVideo/index.module.less +31 -31
  222. package/src/detail/ReplayVideo/index.jsx +93 -93
  223. package/src/detail/ReplayVideo/index.module.less +65 -65
  224. package/src/detail/const.js +20 -20
  225. package/src/detail/hook/usePullSource.js +82 -82
  226. package/src/detail/hook/usePullState.js +51 -51
  227. package/src/detail/index.jsx +482 -482
  228. package/src/detail/index.module.less +188 -188
  229. package/src/hook/useAsync.js +84 -84
  230. package/src/hook/useGoToPage.js +83 -83
  231. package/src/hook/useInterval.js +28 -28
  232. package/src/hook/useIsMounted.js +17 -17
  233. package/src/hook/useModuleByRole.js +53 -53
  234. package/src/hook/usePageScrollable.js +52 -52
  235. package/src/hook/usePortal.js +83 -83
  236. package/src/hook/useScrollRestore/index.js +32 -32
  237. package/src/hook/useScrollRestore/scrollContext.js +20 -20
  238. package/src/hook/useTrackRef.js +11 -11
  239. package/src/hook/useWindowSize.js +28 -28
  240. package/src/hook/useZoom.js +47 -47
  241. package/src/index.js +10 -10
  242. package/src/lib/getLiveOnlineCount.js +10 -10
  243. package/src/lib/getServiceConfig.js +102 -102
  244. package/src/list/Empty/index.jsx +20 -20
  245. package/src/list/Empty/index.module.less +23 -23
  246. package/src/list/ListItem/Action/index.jsx +100 -98
  247. package/src/list/ListItem/Action/index.module.less +19 -21
  248. package/src/list/ListItem/img/play.svg +15 -15
  249. package/src/list/ListItem/img/video.svg +3 -0
  250. package/src/list/ListItem/index.jsx +46 -28
  251. package/src/list/ListItem/index.module.less +152 -146
  252. package/src/list/index.module.less +35 -35
  253. package/src/service/common.js +73 -73
  254. package/src/service/content-mgr.js +73 -73
  255. package/src/service/im-group.js +12 -12
  256. package/src/service/im.js +7 -7
  257. package/src/service/imBroadcasts.js +33 -33
  258. package/src/service/like.js +134 -134
  259. package/src/service/manageApi.js +7 -7
  260. package/src/service/managePortal.js +6 -6
  261. package/src/service/myStudyRecord.js +93 -93
  262. package/src/service/navigation.js +47 -47
  263. package/src/service/ndMeeting.js +10 -10
  264. package/src/service/ndr.js +122 -122
  265. package/src/service/news.js +93 -93
  266. package/src/service/personalCenter.js +270 -270
  267. package/src/service/qualityCourse.js +31 -31
  268. package/src/service/recommend.js +81 -81
  269. package/src/service/school.js +323 -323
  270. package/src/service/search.js +170 -170
  271. package/src/service/site-config.js +7 -7
  272. package/src/service/socialCensor.js +45 -45
  273. package/src/service/specialEdu.js +31 -31
  274. package/src/service/suggestion.js +85 -85
  275. package/src/service/syncClassroom.js +321 -321
  276. package/src/service/tCourse.js +204 -204
  277. package/src/service/tchTraining.js +37 -37
  278. package/src/service/uc.js +45 -45
  279. package/src/util/app.js +1 -1
  280. package/src/util/array.js +3 -3
  281. package/src/util/auth/func.js +57 -57
  282. package/src/util/date.js +53 -53
  283. package/src/util/env.js +9 -9
  284. package/src/util/getTimestamp.js +10 -10
  285. package/src/util/hof.js +105 -105
  286. package/src/util/live/index.js +42 -42
  287. package/src/util/netUrl.js +35 -35
  288. package/src/util/object.js +13 -13
  289. package/src/util/push/index.js +58 -58
  290. package/src/util/request.js +227 -227
  291. package/src/util/type.js +17 -17
  292. package/src/util/url.js +203 -203
  293. package/src/util/video.js +26 -26
  294. package/test/setup.js +21 -21
  295. package/test/unit/component/header/logo.spec.jsx +8 -8
  296. package/test/unit/helper.jsx +25 -25
  297. package/test/unit/util/date.spec.js +40 -40
  298. package/dist/XEduLivePlayer.common.js +0 -72605
  299. package/dist/XEduLivePlayerPre.common.js +0 -72625
@@ -1,83 +1,83 @@
1
- import { useHistory } from 'react-router-dom'
2
-
3
- const smartcan = window.Bridge && window.navigator.userAgent.indexOf('SmartCanWebView') !== -1
4
-
5
- // function getQueryVariable(variable, path) {
6
- // const vars = path.split('&')
7
- // for (let i = 0; i < vars.length; i++) {
8
- // const pair = vars[i].split('=')
9
- // if (pair[0] === variable) {
10
- // return pair[1]
11
- // }
12
- // }
13
- // return null
14
- // }
15
-
16
- export default function useGoToPage() {
17
- const history = useHistory()
18
- return async (subPath, {
19
- useBridge = false,
20
- newPage
21
- } = {}) => {
22
- if (smartcan && useBridge) {
23
- let targetPath
24
- // url 是cmp地址,直接跳转
25
- if (subPath?.startsWith('cmp://')) {
26
- targetPath = subPath
27
- } else if (subPath.indexOf('http') === 0) {
28
- targetPath = subPath
29
- } else if (subPath.substr(0, 1) === '/') {
30
- targetPath = `${window.location.origin}${subPath}`
31
- } else {
32
- targetPath = `${window.location.href}${subPath.substr(1)}`
33
- }
34
- // const title = getQueryVariable('_maf_webview_title', targetPath) || '国家智慧教育读书平台'
35
- targetPath = addQuery(targetPath, {
36
- _maf_menu_ids: getMenuIds(subPath),
37
- _maf_show_progress_bar: false,
38
- _maf_need_decode: true
39
- })
40
- const appfactory = window.Bridge.require('sdp.appfactory').promise()
41
- const result = await appfactory.goPage({
42
- page: targetPath
43
- })
44
- return result
45
- } else if (window.parent === window.self) {
46
- if (newPage) {
47
- window.open(subPath, '_blank')
48
- } else if (subPath.indexOf('http') === 0) {
49
- window.location.href = subPath
50
- } else {
51
- const [
52
- pathname,
53
- search
54
- ] = subPath.split('?')
55
- history.push({
56
- pathname,
57
- search: search && `?${search}`
58
- })
59
- }
60
- } else {
61
- window.open(subPath, '_blank')
62
- }
63
- }
64
- }
65
-
66
- const ShowIdsSubPath = [
67
- '/teacherTraining?firstLevel=t_type_M52vKqPtOQ'
68
- ]
69
-
70
- function getMenuIds(subPath) {
71
- const needMenu = ShowIdsSubPath.some((t) => subPath.indexOf(t) === 0)
72
- return needMenu ? 'all' : 'none'
73
- }
74
-
75
- export function addQuery(url, params) {
76
- const paramStr = Object.keys(params).map((key) => {
77
- const value = params[key]
78
- return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`
79
- }).join('&')
80
- return url.indexOf('?') > 0
81
- ? `${url}&${paramStr}`
82
- : `${url}?${paramStr}`
83
- }
1
+ import { useHistory } from 'react-router-dom'
2
+
3
+ const smartcan = window.Bridge && window.navigator.userAgent.indexOf('SmartCanWebView') !== -1
4
+
5
+ // function getQueryVariable(variable, path) {
6
+ // const vars = path.split('&')
7
+ // for (let i = 0; i < vars.length; i++) {
8
+ // const pair = vars[i].split('=')
9
+ // if (pair[0] === variable) {
10
+ // return pair[1]
11
+ // }
12
+ // }
13
+ // return null
14
+ // }
15
+
16
+ export default function useGoToPage() {
17
+ const history = useHistory()
18
+ return async (subPath, {
19
+ useBridge = false,
20
+ newPage
21
+ } = {}) => {
22
+ if (smartcan && useBridge) {
23
+ let targetPath
24
+ // url 是cmp地址,直接跳转
25
+ if (subPath?.startsWith('cmp://')) {
26
+ targetPath = subPath
27
+ } else if (subPath.indexOf('http') === 0) {
28
+ targetPath = subPath
29
+ } else if (subPath.substr(0, 1) === '/') {
30
+ targetPath = `${window.location.origin}${subPath}`
31
+ } else {
32
+ targetPath = `${window.location.href}${subPath.substr(1)}`
33
+ }
34
+ // const title = getQueryVariable('_maf_webview_title', targetPath) || '国家智慧教育读书平台'
35
+ targetPath = addQuery(targetPath, {
36
+ _maf_menu_ids: getMenuIds(subPath),
37
+ _maf_show_progress_bar: false,
38
+ _maf_need_decode: true
39
+ })
40
+ const appfactory = window.Bridge.require('sdp.appfactory').promise()
41
+ const result = await appfactory.goPage({
42
+ page: targetPath
43
+ })
44
+ return result
45
+ } else if (window.parent === window.self) {
46
+ if (newPage) {
47
+ window.open(subPath, '_blank')
48
+ } else if (subPath.indexOf('http') === 0) {
49
+ window.location.href = subPath
50
+ } else {
51
+ const [
52
+ pathname,
53
+ search
54
+ ] = subPath.split('?')
55
+ history.push({
56
+ pathname,
57
+ search: search && `?${search}`
58
+ })
59
+ }
60
+ } else {
61
+ window.open(subPath, '_blank')
62
+ }
63
+ }
64
+ }
65
+
66
+ const ShowIdsSubPath = [
67
+ '/teacherTraining?firstLevel=t_type_M52vKqPtOQ'
68
+ ]
69
+
70
+ function getMenuIds(subPath) {
71
+ const needMenu = ShowIdsSubPath.some((t) => subPath.indexOf(t) === 0)
72
+ return needMenu ? 'all' : 'none'
73
+ }
74
+
75
+ export function addQuery(url, params) {
76
+ const paramStr = Object.keys(params).map((key) => {
77
+ const value = params[key]
78
+ return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`
79
+ }).join('&')
80
+ return url.indexOf('?') > 0
81
+ ? `${url}&${paramStr}`
82
+ : `${url}?${paramStr}`
83
+ }
@@ -1,28 +1,28 @@
1
- import { useEffect, useRef } from 'react'
2
-
3
- function useInterval(
4
- callback,
5
- delay
6
- ) {
7
- const savedCallback = useRef(callback)
8
-
9
- // Remember the latest callback if it changes.
10
- useEffect(() => {
11
- savedCallback.current = callback
12
- }, [callback])
13
-
14
- // Set up the interval.
15
- useEffect(() => {
16
- // Don't schedule if no delay is specified.
17
- // Note: 0 is a valid value for delay.
18
- if (!delay && delay !== 0) {
19
- return
20
- }
21
-
22
- const id = setInterval(() => savedCallback.current(), delay)
23
-
24
- return () => clearInterval(id)
25
- }, [delay])
26
- }
27
-
28
- export default useInterval
1
+ import { useEffect, useRef } from 'react'
2
+
3
+ function useInterval(
4
+ callback,
5
+ delay
6
+ ) {
7
+ const savedCallback = useRef(callback)
8
+
9
+ // Remember the latest callback if it changes.
10
+ useEffect(() => {
11
+ savedCallback.current = callback
12
+ }, [callback])
13
+
14
+ // Set up the interval.
15
+ useEffect(() => {
16
+ // Don't schedule if no delay is specified.
17
+ // Note: 0 is a valid value for delay.
18
+ if (!delay && delay !== 0) {
19
+ return
20
+ }
21
+
22
+ const id = setInterval(() => savedCallback.current(), delay)
23
+
24
+ return () => clearInterval(id)
25
+ }, [delay])
26
+ }
27
+
28
+ export default useInterval
@@ -1,17 +1,17 @@
1
- import { useCallback, useEffect, useRef } from 'react'
2
-
3
- function useIsMounted() {
4
- const isMounted = useRef(false)
5
-
6
- useEffect(() => {
7
- isMounted.current = true
8
-
9
- return () => {
10
- isMounted.current = false
11
- }
12
- }, [])
13
-
14
- return useCallback(() => isMounted.current, [])
15
- }
16
-
17
- export default useIsMounted
1
+ import { useCallback, useEffect, useRef } from 'react'
2
+
3
+ function useIsMounted() {
4
+ const isMounted = useRef(false)
5
+
6
+ useEffect(() => {
7
+ isMounted.current = true
8
+
9
+ return () => {
10
+ isMounted.current = false
11
+ }
12
+ }, [])
13
+
14
+ return useCallback(() => isMounted.current, [])
15
+ }
16
+
17
+ export default useIsMounted
@@ -1,53 +1,53 @@
1
- import { useContext, useEffect, useState } from 'react'
2
- import { USER_IDENTITY } from '@/config/live'
3
- import UserContext from '@/component/Login/UserContext'
4
-
5
- // 四个模块
6
- export const Module = {
7
- SYNC_CLASSROOM_PICKED: 'SYNC_CLASSROOM_PICKED', // 首页精选课
8
- TCH_TRAINING: 'TCH_TRAINING',
9
- FAMILY_EDU: 'FAMILY_EDU',
10
- EVO_EXP: 'EVO_EXP',
11
- STUDIO: 'STUDIO' // 工作室
12
- }
13
-
14
- // 每个角色不可见的模块
15
- export const inaccessible = {
16
- [USER_IDENTITY.TEACHER]: [],
17
- [USER_IDENTITY.STUDENT]: [Module.SYNC_CLASSROOM_PICKED, Module.TCH_TRAINING, Module.FAMILY_EDU, Module.EVO_EXP, Module.STUDIO],
18
- [USER_IDENTITY.GUARDIAN]: [Module.SYNC_CLASSROOM_PICKED, Module.TCH_TRAINING, Module.EVO_EXP, Module.STUDIO],
19
- [USER_IDENTITY.ACADEMIC_STAFF]: [],
20
- [USER_IDENTITY.ELECTRIC_TEACHER]: [],
21
- [USER_IDENTITY.EDU_ADMIN]: [],
22
- [USER_IDENTITY.SOCIAL_LEARNER]: []
23
- }
24
-
25
- // 四个模块可见性(默认都可见)
26
- const moduleVisible = {
27
- [Module.SYNC_CLASSROOM_PICKED]: true,
28
- [Module.TCH_TRAINING]: true,
29
- [Module.FAMILY_EDU]: true,
30
- [Module.EVO_EXP]: true,
31
- [Module.STUDIO]: true
32
- }
33
-
34
- export default function useModuleByRole() {
35
- const { userInfo, userRole, loginStatus } = useContext(UserContext)
36
- const [visibleModule, setVisibleModule] = useState(moduleVisible)
37
-
38
- useEffect(() => {
39
- if (userInfo && userRole) {
40
- Object.keys(moduleVisible).forEach((key) => {
41
- moduleVisible[key] = !inaccessible[userRole].includes(key)
42
- })
43
- setVisibleModule({
44
- ...moduleVisible
45
- })
46
- }
47
- }, [userInfo, userRole])
48
-
49
- return {
50
- visibleModule,
51
- loginStatus
52
- }
53
- }
1
+ import { useContext, useEffect, useState } from 'react'
2
+ import { USER_IDENTITY } from '@/config/live'
3
+ import UserContext from '@/component/Login/UserContext'
4
+
5
+ // 四个模块
6
+ export const Module = {
7
+ SYNC_CLASSROOM_PICKED: 'SYNC_CLASSROOM_PICKED', // 首页精选课
8
+ TCH_TRAINING: 'TCH_TRAINING',
9
+ FAMILY_EDU: 'FAMILY_EDU',
10
+ EVO_EXP: 'EVO_EXP',
11
+ STUDIO: 'STUDIO' // 工作室
12
+ }
13
+
14
+ // 每个角色不可见的模块
15
+ export const inaccessible = {
16
+ [USER_IDENTITY.TEACHER]: [],
17
+ [USER_IDENTITY.STUDENT]: [Module.SYNC_CLASSROOM_PICKED, Module.TCH_TRAINING, Module.FAMILY_EDU, Module.EVO_EXP, Module.STUDIO],
18
+ [USER_IDENTITY.GUARDIAN]: [Module.SYNC_CLASSROOM_PICKED, Module.TCH_TRAINING, Module.EVO_EXP, Module.STUDIO],
19
+ [USER_IDENTITY.ACADEMIC_STAFF]: [],
20
+ [USER_IDENTITY.ELECTRIC_TEACHER]: [],
21
+ [USER_IDENTITY.EDU_ADMIN]: [],
22
+ [USER_IDENTITY.SOCIAL_LEARNER]: []
23
+ }
24
+
25
+ // 四个模块可见性(默认都可见)
26
+ const moduleVisible = {
27
+ [Module.SYNC_CLASSROOM_PICKED]: true,
28
+ [Module.TCH_TRAINING]: true,
29
+ [Module.FAMILY_EDU]: true,
30
+ [Module.EVO_EXP]: true,
31
+ [Module.STUDIO]: true
32
+ }
33
+
34
+ export default function useModuleByRole() {
35
+ const { userInfo, userRole, loginStatus } = useContext(UserContext)
36
+ const [visibleModule, setVisibleModule] = useState(moduleVisible)
37
+
38
+ useEffect(() => {
39
+ if (userInfo && userRole) {
40
+ Object.keys(moduleVisible).forEach((key) => {
41
+ moduleVisible[key] = !inaccessible[userRole].includes(key)
42
+ })
43
+ setVisibleModule({
44
+ ...moduleVisible
45
+ })
46
+ }
47
+ }, [userInfo, userRole])
48
+
49
+ return {
50
+ visibleModule,
51
+ loginStatus
52
+ }
53
+ }
@@ -1,52 +1,52 @@
1
- import {
2
- createContext,
3
- useContext,
4
- useLayoutEffect,
5
- useRef,
6
- useState
7
- } from 'react'
8
- import { useLocation } from 'react-router-dom'
9
- import { isInElectron } from '@/util/env'
10
-
11
- export function usePageScrollableRoot() {
12
- const location = useLocation()
13
- const [pageScrollable, setPageScrollable] = useState(!isInElectron)
14
- const pageScrollableRef = useRef(pageScrollable)
15
-
16
- const setCurrentPageScrollable = (value) => {
17
- setPageScrollable(value)
18
- }
19
-
20
- useLayoutEffect(() => {
21
- // page不变,是location发生变化
22
- if (pageScrollableRef.current === pageScrollable) {
23
- if (!pageScrollable) {
24
- if (!isInElectron) {
25
- setPageScrollable(true)
26
- pageScrollableRef.current = true
27
- }
28
- }
29
- } else {
30
- // 是page发生变化则同步更新
31
- pageScrollableRef.current = pageScrollable
32
- }
33
- }, [location.key, pageScrollable])
34
-
35
- return {
36
- pageScrollable,
37
- setCurrentPageScrollable
38
- }
39
- }
40
-
41
- export const PageScrollableContext = createContext()
42
- /**
43
- *
44
- * @typedef {Object} UsePageScrollable
45
- * @property {Boolean} pageScrollable 页面是否可以滚动,默认可以滚动
46
- * @property {(isPageScrollable: Boolean) => void} setCurrentPageScrollable 设置当前页面是否可以滚动,设置仅对当前路由有效,切换则设置恢复滚动
47
- */
48
- /**
49
- * 用于React组件下获取siteConfig,注意siteConfig本身是异步获取,所以同步获取的值只能用于React组件渲染
50
- * @returns {UsePageScrollable}
51
- */
52
- export const usePageScrollable = () => useContext(PageScrollableContext)
1
+ import {
2
+ createContext,
3
+ useContext,
4
+ useLayoutEffect,
5
+ useRef,
6
+ useState
7
+ } from 'react'
8
+ import { useLocation } from 'react-router-dom'
9
+ import { isInElectron } from '@/util/env'
10
+
11
+ export function usePageScrollableRoot() {
12
+ const location = useLocation()
13
+ const [pageScrollable, setPageScrollable] = useState(!isInElectron)
14
+ const pageScrollableRef = useRef(pageScrollable)
15
+
16
+ const setCurrentPageScrollable = (value) => {
17
+ setPageScrollable(value)
18
+ }
19
+
20
+ useLayoutEffect(() => {
21
+ // page不变,是location发生变化
22
+ if (pageScrollableRef.current === pageScrollable) {
23
+ if (!pageScrollable) {
24
+ if (!isInElectron) {
25
+ setPageScrollable(true)
26
+ pageScrollableRef.current = true
27
+ }
28
+ }
29
+ } else {
30
+ // 是page发生变化则同步更新
31
+ pageScrollableRef.current = pageScrollable
32
+ }
33
+ }, [location.key, pageScrollable])
34
+
35
+ return {
36
+ pageScrollable,
37
+ setCurrentPageScrollable
38
+ }
39
+ }
40
+
41
+ export const PageScrollableContext = createContext()
42
+ /**
43
+ *
44
+ * @typedef {Object} UsePageScrollable
45
+ * @property {Boolean} pageScrollable 页面是否可以滚动,默认可以滚动
46
+ * @property {(isPageScrollable: Boolean) => void} setCurrentPageScrollable 设置当前页面是否可以滚动,设置仅对当前路由有效,切换则设置恢复滚动
47
+ */
48
+ /**
49
+ * 用于React组件下获取siteConfig,注意siteConfig本身是异步获取,所以同步获取的值只能用于React组件渲染
50
+ * @returns {UsePageScrollable}
51
+ */
52
+ export const usePageScrollable = () => useContext(PageScrollableContext)
@@ -1,83 +1,83 @@
1
- import { useRef, useEffect } from 'react'
2
-
3
- /**
4
- * Creates DOM element to be used as React root.
5
- * @returns {HTMLElement}
6
- */
7
- function createRootElement(id) {
8
- const rootContainer = document.createElement('div')
9
- rootContainer.setAttribute('id', id)
10
- return rootContainer
11
- }
12
-
13
- /**
14
- * Appends element as last child of body.
15
- * @param {HTMLElement} rootElem
16
- */
17
- function addRootElement(rootElem) {
18
- document.body.insertBefore(
19
- rootElem,
20
- document.body.lastElementChild.nextElementSibling
21
- )
22
- }
23
-
24
- /**
25
- * Hook to create a React Portal.
26
- * Automatically handles creating and tearing-down the root elements (no SRR
27
- * makes this trivial), so there is no need to ensure the parent target already
28
- * exists.
29
- * @example
30
- * const target = usePortal(id, [id]);
31
- * return createPortal(children, target);
32
- * @param {String} selector The selector of the target container, e.g '#modal' or '.spotlight'
33
- * @param {containerClass} containerClass
34
- * @returns {HTMLElement} The DOM node to use as the Portal target.
35
- */
36
- function usePortal(selector, containerClass) {
37
- const rootElemRef = useRef(null)
38
-
39
- useEffect(() => {
40
- // Look for existing target dom element to append to
41
- const existingParent = document.querySelector(selector)
42
- // Parent is either a new root or the existing dom element
43
- const parentElem = existingParent || createRootElement(selector)
44
-
45
- // If there is no existing DOM element, add a new one.
46
- if (!existingParent) {
47
- addRootElement(parentElem)
48
- }
49
-
50
- // Add the detached element to the parent
51
- parentElem.appendChild(rootElemRef.current)
52
-
53
- return function removeElement() {
54
- rootElemRef.current.remove()
55
- if (!parentElem.childElementCount) {
56
- parentElem.remove()
57
- }
58
- }
59
- }, [selector])
60
-
61
- /**
62
- * It's important we evaluate this lazily:
63
- * - We need first render to contain the DOM element, so it shouldn't happen
64
- * in useEffect. We would normally put this in the constructor().
65
- * - We can't do 'const rootElemRef = useRef(document.createElement('div))',
66
- * since this will run every single render (that's a lot).
67
- * - We want the ref to consistently point to the same DOM element and only
68
- * ever run once.
69
- * @link https://reactjs.org/docs/hooks-faq.html#how-to-create-expensive-objects-lazily
70
- */
71
- function getRootElem() {
72
- if (!rootElemRef.current) {
73
- const div = document.createElement('div')
74
- div.classList.add(containerClass)
75
- rootElemRef.current = div
76
- }
77
- return rootElemRef.current
78
- }
79
-
80
- return getRootElem()
81
- }
82
-
83
- export default usePortal
1
+ import { useRef, useEffect } from 'react'
2
+
3
+ /**
4
+ * Creates DOM element to be used as React root.
5
+ * @returns {HTMLElement}
6
+ */
7
+ function createRootElement(id) {
8
+ const rootContainer = document.createElement('div')
9
+ rootContainer.setAttribute('id', id)
10
+ return rootContainer
11
+ }
12
+
13
+ /**
14
+ * Appends element as last child of body.
15
+ * @param {HTMLElement} rootElem
16
+ */
17
+ function addRootElement(rootElem) {
18
+ document.body.insertBefore(
19
+ rootElem,
20
+ document.body.lastElementChild.nextElementSibling
21
+ )
22
+ }
23
+
24
+ /**
25
+ * Hook to create a React Portal.
26
+ * Automatically handles creating and tearing-down the root elements (no SRR
27
+ * makes this trivial), so there is no need to ensure the parent target already
28
+ * exists.
29
+ * @example
30
+ * const target = usePortal(id, [id]);
31
+ * return createPortal(children, target);
32
+ * @param {String} selector The selector of the target container, e.g '#modal' or '.spotlight'
33
+ * @param {containerClass} containerClass
34
+ * @returns {HTMLElement} The DOM node to use as the Portal target.
35
+ */
36
+ function usePortal(selector, containerClass) {
37
+ const rootElemRef = useRef(null)
38
+
39
+ useEffect(() => {
40
+ // Look for existing target dom element to append to
41
+ const existingParent = document.querySelector(selector)
42
+ // Parent is either a new root or the existing dom element
43
+ const parentElem = existingParent || createRootElement(selector)
44
+
45
+ // If there is no existing DOM element, add a new one.
46
+ if (!existingParent) {
47
+ addRootElement(parentElem)
48
+ }
49
+
50
+ // Add the detached element to the parent
51
+ parentElem.appendChild(rootElemRef.current)
52
+
53
+ return function removeElement() {
54
+ rootElemRef.current.remove()
55
+ if (!parentElem.childElementCount) {
56
+ parentElem.remove()
57
+ }
58
+ }
59
+ }, [selector])
60
+
61
+ /**
62
+ * It's important we evaluate this lazily:
63
+ * - We need first render to contain the DOM element, so it shouldn't happen
64
+ * in useEffect. We would normally put this in the constructor().
65
+ * - We can't do 'const rootElemRef = useRef(document.createElement('div))',
66
+ * since this will run every single render (that's a lot).
67
+ * - We want the ref to consistently point to the same DOM element and only
68
+ * ever run once.
69
+ * @link https://reactjs.org/docs/hooks-faq.html#how-to-create-expensive-objects-lazily
70
+ */
71
+ function getRootElem() {
72
+ if (!rootElemRef.current) {
73
+ const div = document.createElement('div')
74
+ div.classList.add(containerClass)
75
+ rootElemRef.current = div
76
+ }
77
+ return rootElemRef.current
78
+ }
79
+
80
+ return getRootElem()
81
+ }
82
+
83
+ export default usePortal