Skip to content
Snippets Groups Projects
Router.tsx 1.63 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { Navigate, Route, Routes } from 'react-router-dom'
    
    import { useWhoAmI } from '../../API'
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    import Consents from '../Consents/Consents'
    
    import Loader from '../Loader/Loader'
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    import Login from '../Login/Login'
    import Newsletter from '../Newsletter/Newsletter'
    import Popups from '../Popups/Popups'
    import Prices from '../Prices/Prices'
    
    
    export const links: Record<
      string,
      { label: string; path: string; adminOnly?: boolean }
    > = {
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
      newsletter: {
        label: 'Newsletter',
        path: '/newsletter',
      },
      popups: {
        label: 'Pop-ups',
        path: '/popups',
      },
      prices: {
        label: 'Prix',
        path: '/prices',
      },
      consents: {
        label: 'Consentements',
        path: '/consents',
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    export const routes = Object.keys(links).map(key => ({
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
      label: links[key].label,
      path: links[key].path,
    
      adminOnly: links[key].adminOnly,
    
    const Router = () => {
      const { data: user, isLoading } = useWhoAmI()
    
      if (isLoading) return <Loader />
    
      if (user) {
        return (
          <Routes>
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
            <>
    
              <Route path={links.newsletter.path} element={<Newsletter />} />
              <Route path={links.prices.path} element={<Prices />} />
    
              <Route path="/popups" element={<Popups />} />
    
              {user.isAdmin && (
    
                <Route path={links.consents.path} element={<Consents />} />
    
              <Route path="/login" element={<Login />} />
    
              <Route
                path="*"
                element={<Navigate replace to={links.newsletter.path} />}
              />
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
            </>
    
          </Routes>
        )
      }
    
      return <Login />
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    }
    
    export default Router