feat(sprint-0.5-bis): AppLayout + primitives UI + refonte pages

- AppLayout (sidebar fixe, drawer mobile, BottomNav)
- MobileHeader sticky + Sidebar avec verrouillage hasAccess()
- Primitives src/shared/ui/ : Button, Card, Badge
- SimulationPage + DashboardPage : suppression headers internes
- TaskSelector : Card interactive + Badge EE/EO + eyebrow
- router.tsx : layout routes + ComingSoon inline
This commit is contained in:
Hermann_Kitio 2026-04-20 02:37:19 +03:00
parent 997f39bd33
commit 8450265449
11 changed files with 752 additions and 161 deletions

View file

@ -1,38 +1,66 @@
import React, { Suspense } from 'react'
import { Navigate, Routes, Route } from 'react-router-dom'
import { Navigate, Outlet, Routes, Route } from 'react-router-dom'
import { LoginPage } from '@/features/auth/pages/LoginPage'
import { RegisterPage } from '@/features/auth/pages/RegisterPage'
import { ProtectedRoute } from '@/features/auth/components/ProtectedRoute'
import { DashboardPage } from '@/features/dashboard/pages/DashboardPage'
import { SimulationPage } from '@/features/simulations/pages/SimulationPage'
import { AppLayout } from './AppLayout'
const DesignSystemPage = import.meta.env.DEV
? React.lazy(() => import('@/features/design-system/DesignSystemPage'))
: () => null
function ComingSoon() {
return (
<div className="flex min-h-[60vh] flex-col items-center justify-center gap-2 px-4 text-center">
<p className="text-sm font-medium text-ink-2">Page en cours de développement</p>
<p className="text-xs text-ink-4">Disponible dans une prochaine version.</p>
</div>
)
}
function PrivateLayout() {
return (
<ProtectedRoute>
<AppLayout>
<Outlet />
</AppLayout>
</ProtectedRoute>
)
}
export function AppRouter() {
return (
<Routes>
<Route path="/" element={<Navigate to="/dashboard" replace />} />
<Route path="/login" element={<LoginPage />} />
{/* ── Routes publiques ─────────────────────────────────────── */}
<Route path="/login" element={<LoginPage />} />
<Route path="/register" element={<RegisterPage />} />
<Route
path="/dashboard"
element={
<ProtectedRoute>
<DashboardPage />
</ProtectedRoute>
}
/>
<Route
path="/simulation"
element={
<ProtectedRoute>
<SimulationPage />
</ProtectedRoute>
}
/>
{/* ── Routes privées — ProtectedRoute + AppLayout ──────────── */}
<Route element={<PrivateLayout />}>
<Route path="/" element={<Navigate to="/dashboard" replace />} />
<Route path="/dashboard" element={<DashboardPage />} />
{/* Simulation */}
<Route path="/simulation" element={<Navigate to="/simulation/ee" replace />} />
<Route path="/simulation/ee" element={<SimulationPage />} />
<Route path="/simulation/eo" element={<ComingSoon />} />
{/* Rapport */}
<Route path="/rapport/:id" element={<ComingSoon />} />
{/* Autres sections — Sprint 4+ */}
<Route path="/examen" element={<ComingSoon />} />
<Route path="/progression" element={<ComingSoon />} />
<Route path="/methodologie" element={<ComingSoon />} />
<Route path="/historique" element={<ComingSoon />} />
<Route path="/plan" element={<ComingSoon />} />
<Route path="/parametres" element={<ComingSoon />} />
</Route>
{/* ── Dev only ─────────────────────────────────────────────── */}
{import.meta.env.DEV && (
<Route
path="/design-system"