Guest User

app.tsx

a guest
Dec 2nd, 2020
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.16 KB | None | 0 0
  1.  
  2.  
  3. import React, { useCallback, useMemo, useState } from 'react'
  4. import { ThemeProvider } from 'react-neu'
  5. import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'
  6. import { ToastContainer, Slide } from 'react-toastify'
  7. import { ApolloProvider } from '@apollo/client'
  8. import styled from 'styled-components'
  9. import 'react-toastify/dist/ReactToastify.css'
  10.  
  11. import MobileMenu from 'components/MobileMenu'
  12. import TopBar from 'components/TopBar'
  13.  
  14. import { BalancesProvider } from 'contexts/Balances'
  15. import { AirdropProvider } from 'contexts/Airdrop'
  16. import { ExternalAirdropProvider } from 'contexts/ExternalAirdrop'
  17. import { FarmingProvider } from 'contexts/Farming'
  18. import { PricesProvider } from 'contexts/Prices'
  19. import { WalletProvider } from 'contexts/Wallet'
  20. import { BuySellProvider } from 'contexts/BuySell'
  21. import { DpiTokenMarketDataProvider } from 'contexts/DpiTokenMarketData'
  22. import { DpiIndexComponentsProvider } from 'contexts/DpiIndexComponents'
  23. import { IndexTokenMarketDataProvider } from 'contexts/IndexTokenMarketData'
  24. import { SnapshotProposalsProvider } from 'contexts/SnapshotProposals'
  25. import { TransactionWatcherProvider } from 'contexts/TransactionWatcher'
  26.  
  27. import useLocalStorage from 'hooks/useLocalStorage'
  28.  
  29. import About from 'views/About'
  30. import Farm from 'views/Farm'
  31. import Home from 'views/Home'
  32. import DPI from 'views/DPI'
  33. import INDEX from 'views/INDEX'
  34. import Vote from 'views/Vote'
  35. import News from 'views/News'
  36.  
  37. import createTheme from 'utils/createCustomTheme'
  38. import graphqlClient from 'utils/graphql'
  39.  
  40. const App: React.FC = () => {
  41. const [mobileMenu, setMobileMenu] = useState(false)
  42.  
  43. const handleDismissMobileMenu = useCallback(() => {
  44. setMobileMenu(false)
  45. }, [setMobileMenu])
  46.  
  47. const handlePresentMobileMenu = useCallback(() => {
  48. setMobileMenu(true)
  49. }, [setMobileMenu])
  50.  
  51. return (
  52. <Router>
  53. <Providers>
  54. <StyledBackgroundDiv>
  55. <TopBar onPresentMobileMenu={handlePresentMobileMenu} />
  56. <MobileMenu
  57. onDismiss={handleDismissMobileMenu}
  58. visible={mobileMenu}
  59. />
  60. <Switch>
  61. <Route exact path='/'>
  62. <Home />
  63. </Route>
  64. <Route exact path='/dpi'>
  65. <DPI />
  66. </Route>
  67. <Route exact path='/index'>
  68. <INDEX />
  69. </Route>
  70. <Route exact path='/vote'>
  71. <Vote />
  72. </Route>
  73. <Route exact path='/about'>
  74. <About />
  75. </Route>
  76. <Route exact path='/farm'>
  77. <Farm />
  78. </Route>
  79. <Route path='/news'>
  80. <News />
  81. </Route>
  82. </Switch>
  83. </StyledBackgroundDiv>
  84. </Providers>
  85. </Router>
  86. )
  87. }
  88.  
  89. const Providers: React.FC = ({ children }) => {
  90. const [darkModeSetting] = useLocalStorage('darkMode', true)
  91. const { dark: darkTheme, light: lightTheme } = useMemo(() => {
  92. return createTheme()
  93. }, [])
  94.  
  95. return (
  96. <ThemeProvider
  97. darkModeEnabled={darkModeSetting}
  98. darkTheme={darkTheme}
  99. lightTheme={lightTheme}
  100. >
  101. <TransactionWatcherProvider>
  102. <WalletProvider>
  103. <ApolloProvider client={graphqlClient}>
  104. <AirdropProvider>
  105. <ExternalAirdropProvider>
  106. <PricesProvider>
  107. <BalancesProvider>
  108. <FarmingProvider>
  109. <BuySellProvider>
  110. <DpiTokenMarketDataProvider>
  111. <DpiIndexComponentsProvider>
  112. <IndexTokenMarketDataProvider>
  113. <SnapshotProposalsProvider>
  114. {children}
  115. </SnapshotProposalsProvider>
  116. </IndexTokenMarketDataProvider>
  117. </DpiIndexComponentsProvider>
  118. </DpiTokenMarketDataProvider>
  119. </BuySellProvider>
  120. </FarmingProvider>
  121. </BalancesProvider>
  122. </PricesProvider>
  123. </ExternalAirdropProvider>
  124. </AirdropProvider>
  125. </ApolloProvider>
  126. </WalletProvider>
  127. </TransactionWatcherProvider>
  128. <ToastContainer transition={Slide} position='bottom-left' />
  129. </ThemeProvider>
  130. )
  131. }
  132.  
  133. const StyledBackgroundDiv = styled.div`
  134. background: url(https://index-dao.s3.amazonaws.com/gradient_bg.png);
  135. background-repeat: no-repeat;
  136. background-size: cover;
  137. background-position: center top;
  138. `
  139.  
  140. export default App
  141.  
  142.  
  143.  
Advertisement
Add Comment
Please, Sign In to add comment