Louis Mazin 49bbf77c04 test
2026-09-20 02:10:19 +02:00

134 lines
3.5 KiB
JavaScript

import React from 'react';
import { Routes, Route, Navigate } from 'react-router-dom';
import {
SidebarProvider,
SidebarInset,
useSidebar,
} from '@/components/ui/sidebar';
import {
Menu,
} from 'lucide-react';
import LoginPage from './pages/LoginPage';
import HomePage from './pages/HomePage';
import ProtectedRoute from './components/ProtectedRoute';
import AdminRoute from './components/AdminRoute';
import NavBar from './components/NavBar';
import AdminUsersPage from './pages/AdminUsersPage';
import RegisterPage from './pages/RegisterPage';
import TimeClockPage from './pages/TimeClockPage';
import WeeklySummaryPage from './pages/WeeklySummaryPage';
import { useAuth } from './context/useAuth';
// Composant personnalisé pour le trigger mobile avec icône menu
function MobileSidebarTrigger() {
const { isMobile, toggleSidebar, open } = useSidebar();
const { user } = useAuth();
if (!isMobile || !user) return null;
return (
<div className="flex shrink-0 items-center justify-end gap-2 px-2 py-2">
<button
onClick={toggleSidebar}
className="rounded-md bg-sidebar-primary p-3 text-sidebar-primary-foreground transition-colors hover:bg-sidebar-primary/80"
aria-label={open ? 'Fermer le menu' : 'Ouvrir le menu'}
>
<Menu className="size-6" />
</button>
</div>
);
}
function App() {
return (
<SidebarProvider>
<NavBar />
<SidebarInset className="flex h-svh flex-col overflow-hidden">
<MobileSidebarTrigger />
{/* Zone restante entre header et footer */}
<main className="min-h-0 flex-1 overflow-hidden">
{/* Marges autour de la page */}
<div className="h-full w-full">
{/* SEULE zone scrollable */}
<div className="page-route h-full w-full overflow-hidden">
<Routes>
<Route
path="/login"
element={<LoginPage />}
/>
<Route
path="/register"
element={<RegisterPage />}
/>
<Route
path="/pointage"
element={
<ProtectedRoute>
<TimeClockPage />
</ProtectedRoute>
}
/>
<Route
path="/"
element={
<ProtectedRoute>
<HomePage />
</ProtectedRoute>
}
/>
<Route
path="/users"
element={
<AdminRoute>
<AdminUsersPage />
</AdminRoute>
}
/>
<Route
path="/weekly-summary"
element={
<ProtectedRoute>
<WeeklySummaryPage />
</ProtectedRoute>
}
/>
<Route
path="*"
element={<Navigate to="/" replace />}
/>
</Routes>
</div>
</div>
</main>
<footer className="site-footer shrink-0 py-2">
<p className="text-right text-sm text-muted-foreground">
&copy; 2026 Le Fournil du Bocage. Tous droits réservés.
</p>
</footer>
</SidebarInset>
</SidebarProvider>
);
}
export default App;