App.tsx 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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,onlineUser } 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') {
  39. dispatch(asyncLogout())
  40. } else if(localStorage.isChecked === 'false') {
  41. await onlineUser()
  42. }
  43. }
  44. window.addEventListener("beforeunload",handleKeepIn)
  45. return () => window.removeEventListener("beforeunload",handleKeepIn)
  46. }, [dispatch,token])
  47. return (
  48. <div className={s.appWrapper}>
  49. <MuiPickersUtilsProvider utils={DateFnsUtils}>
  50. <Suspense fallback={<Load/>}>
  51. <BrowserRouter>
  52. <Switch>
  53. <PrivateRoute exact path="/">
  54. <HomePage/>
  55. </PrivateRoute>
  56. <PublicRoute path={'/z/'} restricted>
  57. <AuthPage />
  58. </PublicRoute>
  59. </Switch>
  60. </BrowserRouter>
  61. <CLoad/>
  62. </Suspense>
  63. <ToastContainer
  64. position="top-right"
  65. autoClose={5000}
  66. hideProgressBar={false}
  67. newestOnTop={false}
  68. closeOnClick
  69. rtl={false}
  70. pauseOnFocusLoss
  71. draggable
  72. pauseOnHover
  73. />
  74. </MuiPickersUtilsProvider>
  75. </div>
  76. )}
  77. export default App;