// 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, useNavigate} from 'react-router-dom';
import {ToastContainer} from 'react-toastify';
import Layout from "@layout/Layout";
import {getBFP, getFetchStatus, getHallServerUrl, getUserID, getUserInfo} from '@features/mainSlice';
import {useDispatch, useSelector} from "react-redux";
import {REQ_STATUS} from "@api/config";
import {
reqAgentCheck,
reqCustomService, reqFirstPayConfig, reqGameActivity,
reqGetRoutes,
reqMailCheck,
reqRedpackCheck, reqRedpackConfig,
reqTurnplateIndex,
reqWithdrawBaseInfo
} from "@features/api";
import LoadingScreen from "@components/LoadingScreen";
import DropCoins from "@components/DropCoins";
import {reqPayConfig} from "@features/paySlice";
import {connectHall, disconnectHall} from "@features/actions/hallClient";
import {toast} from "react-toastify";
import {useBlocker} from "react-router";
import FontFaceObserver from 'fontfaceobserver';
import {getTurnplate} from "@features/turnplateSlice";
import {LOCAL_ACTIVITY_C, LOCAL_WHEEL_INVITE_CODE} from "@constants/localkey";
import LoadingFull from "@components/Loading/LoadingFull";
import {ClickAwayListener} from "@mui/base/ClickAwayListener";
import useGlobalClick from "@hooks/useGlobalClick";
import SoundHelp from "@utils/SoundManger";
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);
const navigate = useNavigate();
// auto RTL support for Material-UI components and styled-components
const plugins = direction === 'rtl' ? [rtlPlugin] : [];
const hallServerUrl=useSelector(getHallServerUrl);
useGlobalClick();
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,"")
}
let cname="c";
let ccode=getUrlParam(cname);
if (ccode!=null){
localStorageSet(LOCAL_ACTIVITY_C,ccode);
}
// else{
// localStorageSet(LOCAL_ACTIVITY_C,"");
// }
}
const reProgressierInstallBanner=()=>{
if (window.NewProgressierInstallBanner!=null)return;
let ProgressierInstallBanner=window.ProgressierInstallBanner;
window.NewProgressierInstallBanner=ProgressierInstallBanner;
window.ProgressierInstallBanner=function (e, t) {
this.remove = async function() {
};
this.render = async function() {
};
this.make = function() {
};
this.init = async function() {
}
}
}
const reqInitData=()=>{
//未初始化
if (userID===-1)return;
if (userID>0){
dispatch(connectHall(hallServerUrl));
localStorageSet(LOCAL_WHEEL_INVITE_CODE,"");
localStorageSet(LOCAL_ACTIVITY_C,"");
//Mail红点屏蔽
dispatch(reqMailCheck());
}
else
{
dispatch(disconnectHall());
}
//pay
// reqPayConfig(dispatch,userInfo);
// dispatch(reqFirstPayConfig(userID))
//customer
// dispatch(reqCustomService());
//turnplate
dispatch(reqTurnplateIndex());
//redpack
// dispatch(reqRedpackCheck());
// dispatch(reqRedpackConfig());
//agent
// dispatch(reqAgentCheck());
//activity
// dispatch(reqGameActivity());
}
const appInitData=()=>{
// scroll to top on route change
loadFont();
//请求routes
startReqRoutes();
checkInviteCode();
appRef.current && appRef.current.scrollTo(0, 0);
preventDefault();
reProgressierInstallBanner();
SoundHelp.loadAllAudioFile();
// preventTouchMove();
}
//初始化
useEffect(() => {
appInitData();
return ()=>{
}
}, []);
useEffect(()=>{
reqInitData();
},[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