Skip to content
Snippets Groups Projects
Router.tsx 1.63 KiB
Newer Older
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: 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,
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