Skip to content
Snippets Groups Projects
App.tsx 1.34 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { useState, useEffect } from 'react'
    
    import { BrowserRouter } from 'react-router-dom'
    
    import Layout from './components/Layout/Layout'
    
    import Routes from './components/Routes/Routes'
    
    import { useAuth } from './hooks/useAuth'
    import { UserContext } from './hooks/userContext'
    
    import { User } from './models/user.model'
    
    Guilhem CARRON's avatar
    Guilhem CARRON committed
    import { ToastContainer } from 'react-toastify'
    import 'react-toastify/dist/ReactToastify.css'
    
    Rémi PAILHAREY's avatar
    Rémi PAILHAREY committed
    function App() {
    
      const { loginUser, error, isUserLogged, getUser, logoutUser } = useAuth()
      const [isLogged, setisLogged] = useState<boolean>(false)
      const [user, setuser] = useState<User>()
    
      useEffect(() => {
        let subscribed = true
        async function checkIsLogged() {
          const userLogged = await isUserLogged()
          if (userLogged) {
            setisLogged(true)
            setuser(getUser() as User)
          } else setisLogged(false)
        }
        if (subscribed) checkIsLogged()
        return () => {
          subscribed = false
        }
    
    Guilhem CARRON's avatar
    Guilhem CARRON committed
      }, [isLogged, setisLogged])
    
    Rémi PAILHAREY's avatar
    Rémi PAILHAREY committed
      return (
    
          <UserContext.Provider
            value={{ user, loginUser, error, isLogged, logoutUser, setisLogged }}
          >
    
    Guilhem CARRON's avatar
    Guilhem CARRON committed
            <Layout>
              <Routes />
            </Layout>
          </UserContext.Provider>
    
    Guilhem CARRON's avatar
    Guilhem CARRON committed
          <ToastContainer
            progressClassName="toastProgress"
            bodyClassName="toastBody"
          />
    
    export default App