"use client"; import { useState, useEffect, useTransition } from "react"; import { createPortal } from "react-dom"; import Link from "next/link"; import { NavIcon } from "./ui"; import { useTranslation } from "../../lib/i18n/context"; import type { UserDto } from "@/lib/api"; type NavItem = { href: "/" | "/books" | "/series" | "/authors" | "/libraries" | "/jobs" | "/tokens" | "/settings"; label: string; icon: "dashboard" | "books" | "series" | "authors" | "libraries" | "jobs" | "tokens" | "settings"; }; const HamburgerIcon = () => ( ); const XIcon = () => ( ); export function MobileNav({ navItems, users, activeUserId, setActiveUserAction }: { navItems: NavItem[]; users: UserDto[]; activeUserId: string | null; setActiveUserAction: (formData: FormData) => Promise; }) { const { t } = useTranslation(); const [isOpen, setIsOpen] = useState(false); const [mounted, setMounted] = useState(false); const [, startTransition] = useTransition(); function select(userId: string | null) { startTransition(async () => { const fd = new FormData(); fd.append("user_id", userId ?? ""); await setActiveUserAction(fd); }); } useEffect(() => { setMounted(true); }, []); const overlay = ( <> {/* Backdrop */}
setIsOpen(false)} aria-hidden="true" /> {/* Drawer */}
{t("nav.navigation")}
); return ( <> {/* Hamburger button — reste dans le header */} {/* Backdrop + Drawer portés directement sur document.body, hors du header et de son backdrop-filter */} {mounted && createPortal(overlay, document.body)} ); }