@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.
- package/.browserslistrc +10 -10
- package/.eslintignore +8 -8
- package/.eslintrc.js +26 -26
- package/.gem-mine +11 -11
- package/.postcssrc.js +6 -6
- package/README.md +145 -145
- package/babel.config.js +33 -33
- package/doc/develop.md +23 -23
- package/gem-mine.config.js +86 -86
- package/jest.config.js +9 -9
- package/jsconfig.json +15 -15
- package/mock/helper.js +8 -8
- package/mock/index.js +34 -34
- package/package.json +99 -99
- package/public/3rd/ali-player/alipayercomponents-1.0.8.min.js +26 -26
- package/public/3rd/ali-player/aliplayer-hls-min.js +27 -27
- package/public/3rd/ali-player/aliplayer-min.js +1 -1
- package/public/3rd/im-web-push/index.umd.js +14 -14
- package/public/JsBridge.js +1602 -1602
- package/public/fish/editor/themes/default/css/ueditor.css +1905 -1905
- package/public/fish/editor/third-party/codemirror/codemirror.css +104 -104
- package/public/fish/editor/third-party/codemirror/codemirror.js +3581 -3581
- package/public/fish/editor/third-party/zeroclipboard/ZeroClipboard.js +1255 -1255
- package/public/fish/editor/ueditor.all.min.js +16 -16
- package/public/fish/editor/ueditor.config.js +467 -467
- package/public/fish/icon/umd-4.1.2.js +1 -1
- package/public/fish/video/videoplayer.min.css +6 -6
- package/public/fish/video/videoplayer.min.js +31 -31
- package/public/fish/video/zh-CN.js +82 -82
- package/public/icon/demo.css +539 -539
- package/public/icon/demo_index.html +2189 -2189
- package/public/icon/iconfont.css +363 -363
- package/public/icon/iconfont.json +618 -618
- package/public/index.html +50 -50
- package/script/image/readme.md +77 -77
- package/script/postcss.js +48 -48
- package/src/App.jsx +24 -24
- package/src/asset/img/course/playing.svg +21 -21
- package/src/asset/img/icon-course-white.svg +3 -3
- package/src/asset/img/icon-course.svg +3 -3
- package/src/asset/img/icon-eye-white.svg +4 -4
- package/src/asset/img/icon-eye.svg +4 -4
- package/src/asset/img/icon-school-white.svg +3 -3
- package/src/asset/img/icon-school.svg +3 -3
- package/src/asset/img/loading.svg +52 -52
- package/src/asset/img/video-play.svg +6 -6
- package/src/asset/style/background.less +19 -19
- package/src/asset/style/banner.less +36 -36
- package/src/asset/style/base.less +74 -74
- package/src/asset/style/index.less +114 -114
- package/src/asset/style/reset-theme.less +141 -141
- package/src/asset/style/theme/index.less +55 -55
- package/src/asset/style/theme/party/global.less +20 -20
- package/src/asset/style/theme/party/override.less +57 -57
- package/src/asset/style/theme/test/global.less +18 -18
- package/src/asset/style/theme/test/override.less +45 -45
- package/src/asset/style/variable.less +12 -12
- package/src/component/AliPlayer/index.jsx +49 -49
- package/src/component/Avatar/index.jsx +50 -50
- package/src/component/Empty/index.jsx +34 -34
- package/src/component/Empty/index.module.less +37 -37
- package/src/component/IMChatroom/component/status/403.jsx +13 -13
- package/src/component/IMChatroom/component/status/404.jsx +13 -13
- package/src/component/IMChatroom/component/status/Error.jsx +23 -23
- package/src/component/IMChatroom/component/status/Loading.jsx +5 -5
- package/src/component/IMChatroom/config/app/config.js +118 -118
- package/src/component/IMChatroom/config/app/index.js +60 -60
- package/src/component/IMChatroom/config/env.js +5 -5
- package/src/component/IMChatroom/config/index.js +3 -3
- package/src/component/IMChatroom/config/request/config/base.js +124 -124
- package/src/component/IMChatroom/config/request/config/chatroom.js +26 -26
- package/src/component/IMChatroom/config/request/config/imCoreApi.js +21 -21
- package/src/component/IMChatroom/config/request/index.js +21 -21
- package/src/component/IMChatroom/config/request/proxy.js +39 -39
- package/src/component/IMChatroom/config/url.js +7 -7
- package/src/component/IMChatroom/constants/errorCode.js +9 -9
- package/src/component/IMChatroom/constants/index.js +84 -84
- package/src/component/IMChatroom/constants/origin.js +27 -27
- package/src/component/IMChatroom/context/chatroom.js +154 -154
- package/src/component/IMChatroom/context/connect.js +28 -28
- package/src/component/IMChatroom/i18n/en/index.json +73 -73
- package/src/component/IMChatroom/i18n/index.jsx +14 -14
- package/src/component/IMChatroom/i18n/language.js +9 -9
- package/src/component/IMChatroom/i18n/zh-CN/index.json +73 -73
- package/src/component/IMChatroom/index.jsx +49 -49
- package/src/component/IMChatroom/page/chat/index.jsx +27 -27
- package/src/component/IMChatroom/page/chat/messageEditor/index.jsx +375 -375
- package/src/component/IMChatroom/page/chat/messageList/index.jsx +354 -354
- package/src/component/IMChatroom/page/chat/stickedMessage/index.jsx +59 -59
- package/src/component/IMChatroom/page/chat/stickedMessage/style/index.module.less +7 -7
- package/src/component/IMChatroom/page/chat/style/index.module.less +51 -51
- package/src/component/IMChatroom/page/home/connect/index.jsx +188 -188
- package/src/component/IMChatroom/page/home/connect/status.jsx +124 -124
- package/src/component/IMChatroom/page/home/context/cmd.jsx +37 -37
- package/src/component/IMChatroom/page/home/context/index.jsx +67 -67
- package/src/component/IMChatroom/page/home/index.jsx +164 -164
- package/src/component/IMChatroom/page/home/notice/index.jsx +123 -123
- package/src/component/IMChatroom/page/home/notice/style/index.module.less +49 -49
- package/src/component/IMChatroom/page/home/style/index.module.less +110 -110
- package/src/component/IMChatroom/page/member/index.jsx +15 -15
- package/src/component/IMChatroom/page/member/memberCount/index.jsx +44 -44
- package/src/component/IMChatroom/page/member/memberList/index.jsx +121 -121
- package/src/component/IMChatroom/page/member/style/index.module.less +2 -2
- package/src/component/IMChatroom/sdk/bridge.js +39 -39
- package/src/component/IMChatroom/sdk/cs/constants.js +20 -20
- package/src/component/IMChatroom/sdk/cs/index.js +101 -101
- package/src/component/IMChatroom/sdk/imChatroom.js +15 -15
- package/src/component/IMChatroom/sdk/imcore/constants.js +128 -128
- package/src/component/IMChatroom/sdk/imcore/emitters/chatroomDestroyed.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/chatroomInfoGetFail.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/chatroomKickedByAdmin.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/chatroomKickedBySelf.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/chatroomLoginFail.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/chatroomLoginSuccess.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/chatroomMemberLogin.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/chatroomMemberLogout.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/connectionConnected.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/connectionConnecting.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/connectionDisconnect.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/emitters/index.js +57 -57
- package/src/component/IMChatroom/sdk/imcore/emitters/messageReceive.js +36 -36
- package/src/component/IMChatroom/sdk/imcore/index.js +178 -178
- package/src/component/IMChatroom/sdk/imcore/interceptors/request.js +7 -7
- package/src/component/IMChatroom/sdk/imcore/interceptors/response.js +5 -5
- package/src/component/IMChatroom/sdk/imcore/plugins/getAuth.js +64 -64
- package/src/component/IMChatroom/sdk/imcore/plugins/getConversationId.js +20 -20
- package/src/component/IMChatroom/sdk/imcore/plugins/getExtInfo.js +10 -10
- package/src/component/IMChatroom/sdk/imcore/plugins/getLoginInfo.js +48 -48
- package/src/component/IMChatroom/sdk/imcore/plugins/getPlatformType.js +12 -12
- package/src/component/IMChatroom/sdk/imcore/plugins/index.js +22 -22
- package/src/component/IMChatroom/sdk/imcore/util/format.js +177 -177
- package/src/component/IMChatroom/sdk/imcore/util/parser.js +35 -35
- package/src/component/IMChatroom/sdk/oms.js +18 -18
- package/src/component/IMChatroom/sdk/uc.js +3 -3
- package/src/component/IMChatroom/subscription/channel/app.js +5 -5
- package/src/component/IMChatroom/subscription/channel/ctl.js +22 -22
- package/src/component/IMChatroom/subscription/channel/member.js +40 -40
- package/src/component/IMChatroom/subscription/channel/message.js +13 -13
- package/src/component/IMChatroom/subscription/channel/ntf.js +86 -86
- package/src/component/IMChatroom/subscription/channel/tel.js +5 -5
- package/src/component/IMChatroom/subscription/channel/websocket.js +5 -5
- package/src/component/IMChatroom/subscription/event.js +37 -37
- package/src/component/IMChatroom/subscription/index.js +19 -19
- package/src/component/IMChatroom/util/account.js +8 -8
- package/src/component/IMChatroom/util/chatroom.js +255 -255
- package/src/component/IMChatroom/util/jsonBigInt.js +5 -5
- package/src/component/IMChatroom/util/location.js +12 -12
- package/src/component/Icon/index.jsx +16 -16
- package/src/component/Icon/index.module.less +2 -2
- package/src/component/Pagination/LocalPagination.jsx +27 -27
- package/src/component/Pagination/RemotePagination.jsx +32 -32
- package/src/component/Pagination/index.jsx +32 -31
- package/src/component/Pagination/index.module.less +117 -110
- package/src/component/PlayerTip/index.jsx +34 -34
- package/src/component/VideoBase/index.jsx +242 -242
- package/src/component/VideoBase/style.less +65 -65
- package/src/component/VideoBase/utils.js +81 -81
- package/src/component/mixin.less +9 -9
- package/src/component/status/403.jsx +15 -15
- package/src/component/status/404/index.jsx +73 -73
- package/src/component/status/404/index.module.less +36 -36
- package/src/component/status/Error/error.module.less +13 -13
- package/src/component/status/Error/index.jsx +47 -47
- package/src/component/status/Loading/img/loading.svg +52 -52
- package/src/component/status/Loading/index.jsx +31 -31
- package/src/component/status/Loading/index.less +56 -56
- package/src/component/status/None/index.jsx +20 -20
- package/src/component/status/None/index.module.less +35 -35
- package/src/component/status/Status/index.jsx +26 -26
- package/src/component/status/Status/index.module.less +8 -8
- package/src/config/constant/commonUrl.js +2 -2
- package/src/config/constant/user.js +6 -6
- package/src/config/context/site-config.js +48 -48
- package/src/config/env/index.js +5 -5
- package/src/config/env/local/index.js +13 -13
- package/src/config/env/ncet-xedu/api.js +175 -175
- package/src/config/env/ncet-xedu/app.js +12 -12
- package/src/config/env/ncet-xedu/cs.js +8 -8
- package/src/config/env/ncet-xedu/index.js +14 -14
- package/src/config/env/ncet-xedu/push.js +5 -5
- package/src/config/env/preproduction/api.js +144 -144
- package/src/config/env/preproduction/app.js +12 -12
- package/src/config/env/preproduction/cs.js +8 -8
- package/src/config/env/preproduction/index.js +14 -14
- package/src/config/env/preproduction/push.js +5 -5
- package/src/config/env/product/api.js +113 -113
- package/src/config/env/product/app.js +12 -12
- package/src/config/env/product/cs.js +5 -5
- package/src/config/env/product/index.js +14 -14
- package/src/config/env/product/push.js +5 -5
- package/src/config/live.js +80 -80
- package/src/config/publicLive.js +53 -53
- package/src/config/request/assessments.js +24 -24
- package/src/config/request/config-center.js +8 -8
- package/src/config/request/helper.js +166 -166
- package/src/config/request/im-broadcasts.js +12 -12
- package/src/config/request/live-activity-gateway.js +8 -8
- package/src/config/request/live-activity.js +13 -13
- package/src/config/request/raw.js +6 -6
- package/src/config/request/x-cloud-web.js +13 -13
- package/src/config/request/x-proxy.js +34 -34
- package/src/demo/Detail.jsx +11 -11
- package/src/demo/List.jsx +66 -64
- package/src/demo/index.jsx +17 -17
- package/src/detail/LineSwitch/index.jsx +71 -71
- package/src/detail/LiveCountDown/index.jsx +44 -44
- package/src/detail/LiveCountDown/index.module.less +31 -31
- package/src/detail/LiveOnlineCount/img/icon.svg +15 -15
- package/src/detail/LiveOnlineCount/index.jsx +68 -68
- package/src/detail/LiveOnlineCount/index.module.less +34 -34
- package/src/detail/LiveOnlineCount/util.js +74 -74
- package/src/detail/LiveStatus/AnchorOnTheWay.jsx +88 -88
- package/src/detail/LiveStatus/index.jsx +202 -202
- package/src/detail/LiveStatus/index.module.less +192 -192
- package/src/detail/LiveVideo/config.js +37 -37
- package/src/detail/LiveVideo/index.jsx +188 -188
- package/src/detail/LiveVideo/index.module.less +41 -41
- package/src/detail/NotLoginChatroom/index.jsx +37 -37
- package/src/detail/NotLoginChatroom/index.module.less +46 -46
- package/src/detail/RecordVideo/index.jsx +150 -150
- package/src/detail/RecordVideo/index.module.less +31 -31
- package/src/detail/ReplayVideo/index.jsx +93 -93
- package/src/detail/ReplayVideo/index.module.less +65 -65
- package/src/detail/const.js +20 -20
- package/src/detail/hook/usePullSource.js +82 -82
- package/src/detail/hook/usePullState.js +51 -51
- package/src/detail/index.jsx +482 -482
- package/src/detail/index.module.less +188 -188
- package/src/hook/useAsync.js +84 -84
- package/src/hook/useGoToPage.js +83 -83
- package/src/hook/useInterval.js +28 -28
- package/src/hook/useIsMounted.js +17 -17
- package/src/hook/useModuleByRole.js +53 -53
- package/src/hook/usePageScrollable.js +52 -52
- package/src/hook/usePortal.js +83 -83
- package/src/hook/useScrollRestore/index.js +32 -32
- package/src/hook/useScrollRestore/scrollContext.js +20 -20
- package/src/hook/useTrackRef.js +11 -11
- package/src/hook/useWindowSize.js +28 -28
- package/src/hook/useZoom.js +47 -47
- package/src/index.js +10 -10
- package/src/lib/getLiveOnlineCount.js +10 -10
- package/src/lib/getServiceConfig.js +102 -102
- package/src/list/Empty/index.jsx +20 -20
- package/src/list/Empty/index.module.less +23 -23
- package/src/list/ListItem/Action/index.jsx +100 -98
- package/src/list/ListItem/Action/index.module.less +19 -21
- package/src/list/ListItem/img/play.svg +15 -15
- package/src/list/ListItem/img/video.svg +3 -0
- package/src/list/ListItem/index.jsx +46 -28
- package/src/list/ListItem/index.module.less +152 -146
- package/src/list/index.module.less +35 -35
- package/src/service/common.js +73 -73
- package/src/service/content-mgr.js +73 -73
- package/src/service/im-group.js +12 -12
- package/src/service/im.js +7 -7
- package/src/service/imBroadcasts.js +33 -33
- package/src/service/like.js +134 -134
- package/src/service/manageApi.js +7 -7
- package/src/service/managePortal.js +6 -6
- package/src/service/myStudyRecord.js +93 -93
- package/src/service/navigation.js +47 -47
- package/src/service/ndMeeting.js +10 -10
- package/src/service/ndr.js +122 -122
- package/src/service/news.js +93 -93
- package/src/service/personalCenter.js +270 -270
- package/src/service/qualityCourse.js +31 -31
- package/src/service/recommend.js +81 -81
- package/src/service/school.js +323 -323
- package/src/service/search.js +170 -170
- package/src/service/site-config.js +7 -7
- package/src/service/socialCensor.js +45 -45
- package/src/service/specialEdu.js +31 -31
- package/src/service/suggestion.js +85 -85
- package/src/service/syncClassroom.js +321 -321
- package/src/service/tCourse.js +204 -204
- package/src/service/tchTraining.js +37 -37
- package/src/service/uc.js +45 -45
- package/src/util/app.js +1 -1
- package/src/util/array.js +3 -3
- package/src/util/auth/func.js +57 -57
- package/src/util/date.js +53 -53
- package/src/util/env.js +9 -9
- package/src/util/getTimestamp.js +10 -10
- package/src/util/hof.js +105 -105
- package/src/util/live/index.js +42 -42
- package/src/util/netUrl.js +35 -35
- package/src/util/object.js +13 -13
- package/src/util/push/index.js +58 -58
- package/src/util/request.js +227 -227
- package/src/util/type.js +17 -17
- package/src/util/url.js +203 -203
- package/src/util/video.js +26 -26
- package/test/setup.js +21 -21
- package/test/unit/component/header/logo.spec.jsx +8 -8
- package/test/unit/helper.jsx +25 -25
- package/test/unit/util/date.spec.js +40 -40
- package/dist/XEduLivePlayer.common.js +0 -72605
- package/dist/XEduLivePlayerPre.common.js +0 -72625
|
@@ -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'
|
package/src/hook/useTrackRef.js
CHANGED
|
@@ -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
|
+
}
|
package/src/hook/useZoom.js
CHANGED
|
@@ -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
|
+
}
|
package/src/list/Empty/index.jsx
CHANGED
|
@@ -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
|
+
}
|