({ children }: any)
| 17 | * 初始化页面时的一些请求 |
| 18 | */ |
| 19 | const LoadInitService: FC = ({ children }: any) => { |
| 20 | const [loading, setLoading] = useState<boolean>(true); |
| 21 | const dispatch = useDispatchStore<UserAction>(); |
| 22 | const storeDispatch = useDispatch(); |
| 23 | |
| 24 | useNotification(); |
| 25 | useVersionChangeRedirect(); |
| 26 | |
| 27 | useEffect(() => { |
| 28 | // 处理一些初始化时额外需要的请求 |
| 29 | initRequest?.(dispatch, storeDispatch); |
| 30 | }, [dispatch, storeDispatch]); |
| 31 | |
| 32 | useFetch(UserAPI.getUserInfo, [], { |
| 33 | onPreHandler: () => { |
| 34 | storeDispatch({ |
| 35 | type: Constant.SET_LAYOUT_COMPLETED, |
| 36 | payload: false, |
| 37 | }); |
| 38 | }, |
| 39 | onSuccess: (data) => { |
| 40 | const { avatar, avatar_url: avatarUrl } = data; |
| 41 | const url = avatar || avatarUrl || getUserAvatarURL(data); |
| 42 | const userinfo = { |
| 43 | ...data, |
| 44 | avatar: url, |
| 45 | avatar_url: url, |
| 46 | }; |
| 47 | dispatch({ |
| 48 | type: SET_USERINFO, |
| 49 | payload: userinfo, |
| 50 | }); |
| 51 | storeDispatch({ |
| 52 | type: Constant.SET_USERINFO, |
| 53 | payload: userinfo, |
| 54 | }); |
| 55 | setLoading(false); |
| 56 | // layout加载完毕 |
| 57 | LogMgr.info('loading finished'); |
| 58 | const timer = setTimeout(() => { |
| 59 | storeDispatch({ |
| 60 | type: Constant.SET_LAYOUT_COMPLETED, |
| 61 | payload: true, |
| 62 | }); |
| 63 | clearTimeout(timer); |
| 64 | }, 200); |
| 65 | reportUserInfo(userinfo); |
| 66 | }, |
| 67 | }); |
| 68 | |
| 69 | useEffect(() => { |
| 70 | // 根据loading状态设置layout加载class,用于控制container显示/隐藏 |
| 71 | const node = document.getElementById('main-container'); |
| 72 | const layoutUnCompletedClass = 'layout-uncompleted'; |
| 73 | if (node) { |
| 74 | if (loading && !node.classList.contains(layoutUnCompletedClass)) { |
| 75 | node.classList.add(layoutUnCompletedClass); |
| 76 | } else if (!loading && node.classList.contains(layoutUnCompletedClass)) { |
nothing calls this directly
no test coverage detected