"use client"; import Link from "next/link"; import { usePathname } from "next/navigation"; import type { ReactNode } from "react"; import { can, ROLE_LABELS } from "@/lib/rbac"; import type { AppRole } from "@/types/next-auth"; import { doSignOut } from "./actions"; const TITLES: Record = { "/backend": ["Tableau de bord", "Vue d'ensemble de l'association"], "/backend/adherents": ["Adhérents", "Gérer les commerçants et entreprises"], "/backend/demandes": ["Demandes & messages", "Demandes d'adhésion et messages de contact"], "/backend/promotions": [ "Modération des promotions", "Validez les offres soumises par les adhérents", ], "/backend/rencontres": ["Rencontres", "Gérer les prochaines dates et les archives"], "/backend/emails": ["Création d'e-mails", "Composer des messages aux couleurs de Plein R"], "/backend/administrateurs": ["Administrateurs", "Gérer les accès à l'administration"], "/backend/categories": ["Catégories", "Gérer les métiers de l'annuaire"], "/backend/parametres": ["Paramètres du site", "Configurer l'association et les mentions légales"], "/backend/espace": ["Mon espace adhérent", "Publiez et suivez vos promotions"], "/backend/changer-mot-de-passe": ["Mot de passe", "Sécurisez votre compte"], }; function initialsOf(name: string) { return name .split(/\s+/) .map((w) => w[0]) .join("") .slice(0, 2) .toUpperCase(); } function NavLink({ href, active, children, }: { href: string; active: boolean; children: ReactNode; }) { return ( {children} ); } export function BackendShell({ user, pendingCount, inboxCount = 0, children, }: { user: { name: string; role: AppRole }; pendingCount: number; inboxCount?: number; children: ReactNode; }) { const pathname = usePathname(); const [title, sub] = TITLES[pathname] ?? (pathname.startsWith("/backend/adherents") ? TITLES["/backend/adherents"] : ["Administration", "Plein R"]); const dot = ( ); const dotRound = ( ); const dotDiamond = ( ); return (
{/* sidebar */} {/* main */}

{title}

{sub}
← Voir le site
{children}
); } const sectionLabel = { fontSize: 10.5, letterSpacing: "0.14em", textTransform: "uppercase" as const, color: "#5f7d97", fontWeight: 700, padding: "20px 10px 8px", };