import { useEffect, useState } from "react"; import { NavLink, Navigate, Route, Routes, useNavigate } from "react-router-dom"; import { api } from "./api"; import { useAuth } from "./auth"; import Icon from "./components/Icon"; import BrandMark from "./components/BrandMark"; import Login from "./pages/Login"; import Dashboard from "./pages/Dashboard"; import Products from "./pages/Products"; import ProductForm from "./pages/ProductForm"; import CheckIn from "./pages/CheckIn"; import CheckOut from "./pages/CheckOut"; import Groups from "./pages/Groups"; import Categories from "./pages/Categories"; import Shops from "./pages/Shops"; import ItemResolve from "./pages/ItemResolve"; import LocationResolve from "./pages/LocationResolve"; import Locations from "./pages/Locations"; import PackageTypes from "./pages/PackageTypes"; import Units from "./pages/Units"; import Users from "./pages/Users"; import ShoppingList from "./pages/ShoppingList"; import History from "./pages/History"; import Transfer from "./pages/Transfer"; import Settings from "./pages/Settings"; const navClass = ({ isActive }) => (isActive ? "nav-link active" : "nav-link"); function NavItem({ to, icon, label, end }) { return ( {label} ); } function Sidebar() { const { user, isAdmin, logout } = useAuth(); const navigate = useNavigate(); const [dashboards, setDashboards] = useState([]); // Die Dashboards des Benutzers stehen als eigene Eintraege in der Leiste. // Sie aendern sich beim Anlegen und Loeschen, deshalb horcht die Leiste auf // das Ereignis, das die Dashboard-Seite dabei ausloest. useEffect(() => { function laden() { api.dashboards().then((a) => setDashboards(a.dashboards)).catch(() => {}); } laden(); window.addEventListener("dashboards-geaendert", laden); return () => window.removeEventListener("dashboards-geaendert", laden); }, []); function handleLogout() { logout(); navigate("/login"); } return ( ); } function Protected({ children, adminOnly = false, wide = false }) { const { user, isAdmin, loading } = useAuth(); if (loading) return
Lädt…
; if (!user) return ; if (adminOnly && !isAdmin) return ; return (
{/* `wide` hebt die Lesebreite auf – nur fürs Dashboard-Raster sinnvoll. */}
{children}
); } export default function App() { const { user, loading } = useAuth(); return ( : } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ); }