188 lines
7.1 KiB
TypeScript
188 lines
7.1 KiB
TypeScript
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 (
|
|
<Router history={history}>
|
|
<ResetCSS />
|
|
<GlobalStyle />
|
|
<Menu>
|
|
<SuspenseWithChunkError fallback={<PageLoader />}>
|
|
<Switch>
|
|
<Route path="/" exact>
|
|
<Home />
|
|
</Route>
|
|
<Route exact path="/farms/auction">
|
|
<FarmAuction />
|
|
</Route>
|
|
<Route path="/farms">
|
|
<Farms />
|
|
</Route>
|
|
<Route path="/pools">
|
|
<Pools />
|
|
</Route>
|
|
<Route path="/referral">
|
|
<Referral />
|
|
</Route>
|
|
<Route path="/board">
|
|
<Board />
|
|
</Route>
|
|
<Route path="/nft">
|
|
<Nft />
|
|
</Route>
|
|
<Route path="/announcement">
|
|
<Announcement />
|
|
</Route>
|
|
{/* <Route path="/lottery">
|
|
<Lottery />
|
|
</Route>
|
|
<Route path="/ifo">
|
|
<Ifos />
|
|
</Route>
|
|
<Route path="/collectibles">
|
|
<Collectibles />
|
|
</Route>
|
|
<Route exact path="/teams">
|
|
<Teams />
|
|
</Route>
|
|
<Route path="/teams/:id">
|
|
<Team />
|
|
</Route>
|
|
<Route path="/profile">
|
|
<Profile />
|
|
</Route>
|
|
<Route path="/competition">
|
|
<TradingCompetition />
|
|
</Route>
|
|
<Route path="/prediction">
|
|
<Predictions />
|
|
</Route>
|
|
<Route exact path="/voting">
|
|
<Voting />
|
|
</Route>
|
|
<Route exact path="/voting/proposal/create">
|
|
<CreateProposal />
|
|
</Route>
|
|
<Route path="/voting/proposal/:id">
|
|
<Proposal />
|
|
</Route>
|
|
|
|
{/* Using this format because these components use routes injected props. We need to rework them with hooks */}
|
|
{/* <Route exact strict path="/swap" component={Swap} />
|
|
<Route exact strict path="/swap/:outputCurrency" component={RedirectToSwap} />
|
|
<Route exact strict path="/send" component={RedirectPathToSwapOnly} />
|
|
<Route exact strict path="/find" component={PoolFinder} />
|
|
<Route exact strict path="/pool" component={Pool} />
|
|
<Route exact strict path="/create" component={RedirectToAddLiquidity} />
|
|
<Route exact path="/add" component={AddLiquidity} />
|
|
<Route exact path="/add/:currencyIdA" component={RedirectOldAddLiquidityPathStructure} />
|
|
<Route exact path="/add/:currencyIdA/:currencyIdB" component={RedirectDuplicateTokenIds} />
|
|
<Route exact path="/create" component={AddLiquidity} />
|
|
<Route exact path="/create/:currencyIdA" component={RedirectOldAddLiquidityPathStructure} />
|
|
<Route exact path="/create/:currencyIdA/:currencyIdB" component={RedirectDuplicateTokenIds} />
|
|
<Route exact strict path="/remove/:tokens" component={RedirectOldRemoveLiquidityPathStructure} />
|
|
<Route exact strict path="/remove/:currencyIdA/:currencyIdB" component={RemoveLiquidity} />
|
|
<Route exact strict path="/nft" component={Nft} />
|
|
<Route exact strict path="/announcement" component={Announcement} /> */}
|
|
|
|
{/* Redirect */}
|
|
{/* <Route path="/staking">
|
|
<Redirect to="/pools" />
|
|
</Route>
|
|
<Route path="/syrup">
|
|
<Redirect to="/pools" />
|
|
</Route>
|
|
<Route path="/nft">
|
|
<Redirect to="/collectibles" />
|
|
</Route> */}
|
|
|
|
{/* 404 */}
|
|
<Route component={NotFound} />
|
|
</Switch>
|
|
</SuspenseWithChunkError>
|
|
</Menu>
|
|
<EasterEgg iterations={2} />
|
|
<ToastListener />
|
|
<DatePickerPortal />
|
|
</Router>
|
|
)
|
|
}
|
|
|
|
export default React.memo(App)
|