App.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. // GA
  2. import ReactGA from 'react-ga4';
  3. // utils
  4. import {lazy, Suspense} from 'react';
  5. // styles
  6. import ThemeStyles from '@styles/theme';
  7. import './style.scss';
  8. // libs styles
  9. import 'react-toastify/dist/ReactToastify.min.css';
  10. import 'react-grid-layout/css/styles.css';
  11. import 'swiper/css';
  12. import 'swiper/css/effect-fade';
  13. import 'swiper/css/pagination';
  14. // fonts
  15. import '@fonts/icomoon/icomoon.woff';
  16. // contexts
  17. import {SidebarProvider, useSidebar} from '@contexts/sidebarContext';
  18. import {ThemeProvider} from 'styled-components';
  19. // hooks
  20. import {useThemeProvider} from '@contexts/themeContext';
  21. import {useEffect, useRef} from 'react';
  22. import {useWindowSize} from 'react-use';
  23. import useAuthRoute from '@hooks/useAuthRoute';
  24. // utils
  25. import {StyleSheetManager} from 'styled-components';
  26. import {ThemeProvider as MuiThemeProvider, createTheme} from '@mui/material/styles';
  27. import {preventDefault} from '@utils/helpers';
  28. import rtlPlugin from 'stylis-plugin-rtl';
  29. import {CacheProvider} from '@emotion/react';
  30. import createCache from '@emotion/cache';
  31. // components
  32. import {BrowserRouter, HashRouter, Route, Routes, useLocation} from 'react-router-dom';
  33. import {ToastContainer} from 'react-toastify';
  34. import Layout from "@layout/Layout";
  35. import {getFetchStatus} from '@features/mainSlice';
  36. import {useDispatch, useSelector} from "react-redux";
  37. import {REQ_STATUS} from "@api/config";
  38. import {reqGetRoutes} from "@features/api";
  39. import LoadingScreen from "@components/LoadingScreen";
  40. const App = () => {
  41. const dispatch = useDispatch();
  42. const fetchStatus=useSelector(getFetchStatus);
  43. const appRef = useRef(null);
  44. const {theme, direction} = useThemeProvider();
  45. const gaKey = process.env.REACT_APP_PUBLIC_GA;
  46. gaKey && ReactGA.initialize(gaKey);
  47. // auto RTL support for Material-UI components and styled-components
  48. const plugins = direction === 'rtl' ? [rtlPlugin] : [];
  49. const muiTheme = createTheme({
  50. direction: direction,
  51. });
  52. const cacheRtl = createCache({
  53. key: 'css-rtl',
  54. stylisPlugins: plugins,
  55. });
  56. const startReqRoutes=()=>{
  57. dispatch(reqGetRoutes());
  58. }
  59. useEffect(() => {
  60. // scroll to top on route change
  61. //请求routes
  62. startReqRoutes();
  63. appRef.current && appRef.current.scrollTo(0, 0);
  64. preventDefault();
  65. }, []);
  66. const renderLayout=()=>{
  67. return (
  68. <>
  69. {
  70. fetchStatus==REQ_STATUS.IDLE?<Layout />:(<LoadingScreen />)
  71. }
  72. </>
  73. )
  74. }
  75. // return (
  76. // <CacheProvider value={cacheRtl}>
  77. // <MuiThemeProvider theme={muiTheme}>
  78. // <SidebarProvider>
  79. // <ThemeProvider theme={{theme: theme}}>
  80. // <ThemeStyles/>
  81. // <ToastContainer theme={theme} autoClose={2500}
  82. // position={direction === 'ltr' ? 'top-right' : 'top-left'}/>
  83. // <StyleSheetManager stylisPlugins={plugins}>
  84. // {
  85. // renderLayout()
  86. // }
  87. // </StyleSheetManager>
  88. // </ThemeProvider>
  89. // </SidebarProvider>
  90. // </MuiThemeProvider>
  91. // </CacheProvider>
  92. // );
  93. return (
  94. <CacheProvider value={cacheRtl}>
  95. <MuiThemeProvider theme={muiTheme}>
  96. <ThemeProvider theme={{theme: theme}}>
  97. <SidebarProvider>
  98. <ThemeStyles/>
  99. <ToastContainer theme={theme} autoClose={2500}
  100. position={direction === 'ltr' ? 'top-right' : 'top-left'}/>
  101. <StyleSheetManager stylisPlugins={plugins}>
  102. {
  103. renderLayout()
  104. }
  105. </StyleSheetManager>
  106. </SidebarProvider>
  107. </ThemeProvider>
  108. </MuiThemeProvider>
  109. </CacheProvider>
  110. );
  111. }
  112. export default App