App.tsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { lazy, Suspense , useEffect } from 'react';
  2. import { BrowserRouter, Switch } from 'react-router-dom';
  3. import { ToastContainer } from 'react-toastify';
  4. import { useSelector, useDispatch } from 'react-redux';
  5. import { MuiPickersUtilsProvider } from '@material-ui/pickers';
  6. import DateFnsUtils from '@date-io/date-fns';
  7. import s from './App.module.css';
  8. import { getToken } from './redux/authorization/selector'
  9. import { asyncLogout, asyncCurrentUser } from './redux/authorization/operations'
  10. import { setToken } from './api-data'
  11. import PrivateRoute from './components/reusableComponents/Routes/PrivateRoute';
  12. import PublicRoute from './components/reusableComponents/Routes/PublicRoute';
  13. import {Load,CLoad} from './components/reusableComponents/Loader/Loader';
  14. const HomePage = lazy(
  15. () =>
  16. import(
  17. './components/HomePage' /* webpackChunkName: "HomePage" */
  18. ),
  19. );
  20. const AuthPage = lazy(
  21. () =>
  22. import(
  23. './components/AuthPage' /* webpackChunkName: "AuthPage" */
  24. ),
  25. );
  26. function App() {
  27. const token = useSelector(getToken)
  28. const dispatch = useDispatch()
  29. useEffect(() => {
  30. if(!localStorage.isChecked) localStorage.isChecked = 'true'
  31. }, [])
  32. useEffect(() => {
  33. if (token) {
  34. setToken.set(token)
  35. dispatch(asyncCurrentUser())
  36. }
  37. const handleKeepIn = async () => {
  38. if (localStorage.isChecked === 'false') await dispatch(asyncLogout())
  39. }
  40. window.addEventListener("beforeunload",handleKeepIn)
  41. return () => window.removeEventListener("beforeunload",handleKeepIn)
  42. }, [dispatch,token])
  43. return (
  44. <div className={s.appWrapper}>
  45. <MuiPickersUtilsProvider utils={DateFnsUtils}>
  46. <Suspense fallback={<Load/>}>
  47. <BrowserRouter>
  48. <Switch>
  49. <PrivateRoute exact path="/">
  50. <HomePage/>
  51. </PrivateRoute>
  52. <PublicRoute path={'/z/'} restricted>
  53. <AuthPage />
  54. </PublicRoute>
  55. </Switch>
  56. </BrowserRouter>
  57. <CLoad/>
  58. </Suspense>
  59. <ToastContainer
  60. position="top-right"
  61. autoClose={5000}
  62. hideProgressBar={false}
  63. newestOnTop={false}
  64. closeOnClick
  65. rtl={false}
  66. pauseOnFocusLoss
  67. draggable
  68. pauseOnHover
  69. />
  70. </MuiPickersUtilsProvider>
  71. </div>
  72. )}
  73. export default App;