App.tsx 2.1 KB

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