diff --git a/ui/dashboardApp/layout/main/index.js b/ui/dashboardApp/layout/main/index.js index 4609cc678b..ff2b1d96a7 100644 --- a/ui/dashboardApp/layout/main/index.js +++ b/ui/dashboardApp/layout/main/index.js @@ -3,6 +3,7 @@ import { Root } from '@lib/components' import { useLocalStorageState } from '@umijs/hooks' import { HashRouter as Router } from 'react-router-dom' import { useSpring, animated } from 'react-spring' +import { TopLoadingBar } from '@lib/components' import Sider from './Sider' import styles from './index.module.less' @@ -70,6 +71,7 @@ export default function App({ registry }) { return ( + -
-
-
- + + +
+
+
+ +
+
- -
+ ) } diff --git a/ui/lib/components/TopLoadingBar/index.tsx b/ui/lib/components/TopLoadingBar/index.tsx new file mode 100644 index 0000000000..33bf3e6236 --- /dev/null +++ b/ui/lib/components/TopLoadingBar/index.tsx @@ -0,0 +1,34 @@ +import React, { useRef, useEffect } from 'react' +import LoadingBar from 'react-top-loading-bar' + +const useLoadingBar = () => { + const loadingBar = useRef(null) + + useEffect(() => { + function startLoading() { + loadingBar?.current?.continuousStart() + } + window.addEventListener('single-spa:before-routing-event', startLoading) + return () => + window.removeEventListener( + 'single-spa:before-routing-event', + startLoading + ) + }, []) + + useEffect(() => { + function completeLoading() { + loadingBar?.current?.complete() + } + window.addEventListener('single-spa:routing-event', completeLoading) + return () => + window.removeEventListener('single-spa:routing-event', completeLoading) + }, []) + + return loadingBar +} + +export default function TopLoadinngBar() { + const loadingBar = useLoadingBar() + return +} diff --git a/ui/lib/components/index.ts b/ui/lib/components/index.ts index 6b2ca5776a..2529be51b1 100644 --- a/ui/lib/components/index.ts +++ b/ui/lib/components/index.ts @@ -43,3 +43,4 @@ export { default as ShortValueWithTooltip } from './ShortValueWithTooltip' export { default as LanguageDropdown } from './LanguageDropdown' export { default as ParamsPageWrapper } from './ParamsPageWrapper' +export { default as TopLoadingBar } from './TopLoadingBar' diff --git a/ui/package.json b/ui/package.json index 8b56928e5f..d178a90238 100644 --- a/ui/package.json +++ b/ui/package.json @@ -34,6 +34,7 @@ "react-router-dom": "^6.0.0-alpha.3", "react-spring": "^8.0.27", "react-syntax-highlighter": "^12.2.1", + "react-top-loading-bar": "^1.2.0", "react-use": "^14.2.0", "single-spa": "^5.3.4", "single-spa-react": "^2.14.0", diff --git a/ui/yarn.lock b/ui/yarn.lock index f5ebc10582..1ebd56b02a 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -11372,6 +11372,11 @@ react-syntax-highlighter@^12.2.1: prismjs "^1.8.4" refractor "^2.4.1" +react-top-loading-bar@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/react-top-loading-bar/-/react-top-loading-bar-1.2.0.tgz#fcbca3c2e462bee7b1c0d1850e8b584cd7bd5a26" + integrity sha512-5oNdy+DfD5JK06bcc/gsnnXHmml+d8eaBe3C8KQ3eLiH/BD8+FcwsgbAwqgOaRjuSeVQXdYN2JC2G1uVFtCLfA== + react-universal-interface@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/react-universal-interface/-/react-universal-interface-0.6.0.tgz#b65cbf7d71a2f3f7dd9705d8e4f06748539bd465"