Skip to content
Snippets Groups Projects
Router.tsx 1.63 KiB
Newer Older
  • Learn to ignore specific revisions
  • Bastien DUMONT's avatar
    Bastien DUMONT committed
    import React, { useContext } from 'react'
    import { Redirect, Route, Switch } from 'react-router-dom'
    import { UserContext } from '../../hooks/userContext'
    import Consents from '../Consents/Consents'
    import Login from '../Login/Login'
    import Newsletter from '../Newsletter/Newsletter'
    import Popups from '../Popups/Popups'
    import Prices from '../Prices/Prices'
    
    
    export const links: {
      [key: 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,
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    }))
    
    const Router: React.FC = () => {
      const { user } = useContext(UserContext)
    
      return (
        <Switch>
          {user ? (
            <>
              <Route exact path={links.newsletter.path} component={Newsletter} />
              <Route exact path={links.prices.path} component={Prices} />
              <Route exact path={links.popups.path} component={Popups} />
    
              {user.isAdmin && (
                <Route exact path={links.consents.path} component={Consents} />
              )}
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
              <Redirect path="*" to={links.newsletter.path} />
            </>
          ) : (
            <>
              <Route path="/login" component={Login} />
              <Redirect path="*" to="/login" />
            </>
          )}
        </Switch>
      )
    }
    
    export default Router