Skip to content
Snippets Groups Projects
Router.tsx 1.76 KiB
import { Navigate, Route, Routes } from 'react-router-dom'
import { useWhoAmI } from '../../API'
import Consents from '../Consents/Consents'
import Loader from '../Loader/Loader'
import Login from '../Login/Login'
import Newsletter from '../Newsletter/Newsletter'
import Popups from '../Popups/Popups'
import Prices from '../Prices/Prices'
import SideBar from '../SideBar/SideBar'

export const links: Record<
  string,
  { label: string; path: string; adminOnly?: boolean }
> = {
  newsletter: {
    label: 'Newsletter',
    path: '/newsletter',
  },
  popups: {
    label: 'Pop-ups',
    path: '/popups',
  },
  prices: {
    label: 'Prix',
    path: '/prices',
  },
  consents: {
    label: 'Consentements',
    path: '/consents',
    adminOnly: true,
  },
}

export const routes = Object.keys(links).map(key => ({
  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 (
      <>
        <SideBar />
        <main className="wrapper">
          <Routes>
            <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} />}
            />
          </Routes>
        </main>
      </>
    )
  }

  return <Login />
}

export default Router