// GA import ReactGA from 'react-ga4'; // utils import {lazy, Suspense} from 'react'; // styles import ThemeStyles from '@styles/theme'; import './style.scss'; // libs styles import 'react-toastify/dist/ReactToastify.min.css'; import 'react-grid-layout/css/styles.css'; import 'swiper/css'; import 'swiper/css/effect-fade'; import 'swiper/css/pagination'; // fonts import '@fonts/icomoon/icomoon.woff'; // import '@fonts/swisscbt/SWISSC-BT.ttf' // contexts import {SidebarProvider, useSidebar} from '@contexts/sidebarContext'; import {ThemeProvider} from 'styled-components'; // hooks import {useThemeProvider} from '@contexts/themeContext'; import {useEffect, useRef} from 'react'; import {useWindowSize} from 'react-use'; import useAuthRoute from '@hooks/useAuthRoute'; // utils import {StyleSheetManager} from 'styled-components'; import {ThemeProvider as MuiThemeProvider, createTheme} from '@mui/material/styles'; import {getUrlParam, localStorageSet, preventDefault} from '@utils/helpers'; import rtlPlugin from 'stylis-plugin-rtl'; import {CacheProvider} from '@emotion/react'; import createCache from '@emotion/cache'; // components import {BrowserRouter, HashRouter, Route, Routes, useLocation} from 'react-router-dom'; import {ToastContainer} from 'react-toastify'; import Layout from "@layout/Layout"; import {getBFP, getFetchStatus, getUserID, getUserInfo} from '@features/mainSlice'; import {useDispatch, useSelector} from "react-redux"; import {REQ_STATUS} from "@api/config"; import {reqCustomService, reqGetRoutes, reqTurnplateIndex, reqWithdrawBaseInfo} from "@features/api"; import LoadingScreen from "@components/LoadingScreen"; import {reqPayConfig} from "@features/paySlice"; import {connectHall, disconnectHall} from "@features/actions/hallClient"; import * as toast from "react-toastify"; import {useBlocker} from "react-router"; import FontFaceObserver from 'fontfaceobserver'; import {getTurnplate} from "@features/turnplateSlice"; import {LOCAL_WHEEL_INVITE_CODE} from "@constants/localkey"; const App = () => { const dispatch = useDispatch(); const fetchStatus=useSelector(getFetchStatus); const userInfo=useSelector(getUserInfo); const userID=useSelector(getUserID); const turnplate=useSelector(getTurnplate); const appRef = useRef(null); const {theme, direction,setIsShowWheel} = useThemeProvider(); const {pathname, search, hash} = useLocation(); const gaKey = process.env.REACT_APP_PUBLIC_GA; gaKey && ReactGA.initialize(gaKey); // auto RTL support for Material-UI components and styled-components const plugins = direction === 'rtl' ? [rtlPlugin] : []; const muiTheme = createTheme({ direction: direction, }); const cacheRtl = createCache({ key: 'css-rtl', stylisPlugins: plugins, }); const startReqRoutes=()=>{ //先请求指纹id dispatch(getBFP()).then((result)=>{ dispatch(reqGetRoutes()); }); } const loadFont=()=>{ // let swisscbt=new FontFaceObserver("SWISSC-BT"); // swisscbt.load().then(() => { // // }) new FontFaceObserver("SWISSC-BT").load(); new FontFaceObserver("Roboto").load(); new FontFaceObserver("Roboto-1").load(); } //检查邀请码 const checkInviteCode=()=>{ let name="act"; let code=getUrlParam(name); if (code!=null){ localStorageSet(LOCAL_WHEEL_INVITE_CODE,code) } else { localStorageSet(LOCAL_WHEEL_INVITE_CODE,"") } } //初始化 useEffect(() => { // scroll to top on route change loadFont(); //请求routes startReqRoutes(); appRef.current && appRef.current.scrollTo(0, 0); preventDefault(); checkInviteCode(); }, []); useEffect(()=>{ if (userID!=0){ dispatch(connectHall()); //withdraw dispatch(reqWithdrawBaseInfo()); //turnplate // dispatch(reqTurnplateIndex()); //rest code localStorageSet(LOCAL_WHEEL_INVITE_CODE,"") } else { dispatch(disconnectHall()); } //pay reqPayConfig(dispatch,userInfo); //customer dispatch(reqCustomService()); dispatch(reqTurnplateIndex()); },[userID]) //转盘 useEffect(()=>{ if(turnplate){ let times=turnplate.times; if (times>0){ if (pathname==="/"){ if(hash==null||hash===""){ setIsShowWheel(true) } } } } },[turnplate]) const renderLayout=()=>{ return ( <> { fetchStatus===REQ_STATUS.IDLE?:() } ) } // return ( // // // // // // // // { // renderLayout() // } // // // // // // ); return ( { renderLayout() } ); } export default App