import React, { lazy, useEffect } from 'react' import { Router, Redirect, Route, Switch } from 'react-router-dom' import { ResetCSS } from '@pancakeswap/uikit' import { useDispatch } from 'react-redux' import BigNumber from 'bignumber.js' import useEagerConnect from 'hooks/useEagerConnect' import { usePollCoreFarmData, useFetchProfile, usePollBlockNumber } from 'state/hooks' import { DatePickerPortal } from 'components/DatePicker' import { initAxios } from 'utils/request' import useToast from 'hooks/useToast' import { fetchUserInfo, clearUserInfo } from 'state/actions' import { useAccount } from 'state/userInfo/hooks' import GlobalStyle from './style/Global' import Menu from './components/Menu' import SuspenseWithChunkError from './components/SuspenseWithChunkError' import { ToastListener } from './contexts/ToastsContext' import PageLoader from './components/Loader/PageLoader' import EasterEgg from './components/EasterEgg' import history from './routerHistory' // Views included in the main bundle import Pools from './views/Pools' import Swap from './views/Swap' import { RedirectDuplicateTokenIds, RedirectOldAddLiquidityPathStructure, RedirectToAddLiquidity, } from './views/AddLiquidity/redirects' import RedirectOldRemoveLiquidityPathStructure from './views/RemoveLiquidity/redirects' import { RedirectPathToSwapOnly, RedirectToSwap } from './views/Swap/redirects' // Route-based code splitting // Only pool is included in the main bundle because of it's the most visited page const Home = lazy(() => import('./views/Home')) const Farms = lazy(() => import('./views/Farms')) const FarmAuction = lazy(() => import('./views/FarmAuction')) const Lottery = lazy(() => import('./views/Lottery')) const Ifos = lazy(() => import('./views/Ifos')) const NotFound = lazy(() => import('./views/NotFound')) const Collectibles = lazy(() => import('./views/Collectibles')) const Teams = lazy(() => import('./views/Teams')) const Team = lazy(() => import('./views/Teams/Team')) const Profile = lazy(() => import('./views/Profile')) const TradingCompetition = lazy(() => import('./views/TradingCompetition')) const Predictions = lazy(() => import('./views/Predictions')) const Voting = lazy(() => import('./views/Voting')) const Proposal = lazy(() => import('./views/Voting/Proposal')) const CreateProposal = lazy(() => import('./views/Voting/CreateProposal')) const AddLiquidity = lazy(() => import('./views/AddLiquidity')) const Pool = lazy(() => import('./views/Pool')) const PoolFinder = lazy(() => import('./views/PoolFinder')) const RemoveLiquidity = lazy(() => import('./views/RemoveLiquidity')) const Referral = lazy(() => import('./views/Referral')) const Board = lazy(() => import('./views/Board')) const Nft = lazy(() => import('./views/Nft')) const Announcement = lazy(() => import('./views/Announcement')) // This config is required for number formatting BigNumber.config({ EXPONENTIAL_AT: 1000, DECIMAL_PLACES: 80, }) const App: React.FC = () => { usePollBlockNumber() useEagerConnect() useFetchProfile() usePollCoreFarmData() const dispatch = useDispatch() const toast = useToast() const account = useAccount() useEffect(() => { initAxios(() => { dispatch(clearUserInfo) }, toast) }, []) useEffect(() => { account && dispatch(fetchUserInfo()) }, [account]) return ( }> {/* {/* Using this format because these components use routes injected props. We need to rework them with hooks */} {/* Redirect */} {/* */} {/* 404 */} ) } export default React.memo(App)