import { useQuery } from "@tanstack/react-query"; import { LogOut, Menu } from "lucide-react"; import { useEffect } from "react"; import { Link, NavLink, Outlet, useLocation } from "react-router-dom"; import { StatusFooter } from "@/components/StatusFooter"; import { StatusPill } from "@/components/StatusPill"; import { api } from "@/lib/api"; import { cn } from "@/lib/cn"; import type { SystemStatus } from "@/lib/types"; import { useAuth } from "@/store/auth"; import { useUi } from "@/store/ui"; const navItems = [ { to: "/", label: "Library" }, { to: "/upload", label: "Upload" }, ]; export function AppShell() { const user = useAuth((state) => state.user); const logout = useAuth((state) => state.logout); const toggleSidebar = useUi((state) => state.toggleSidebar); const location = useLocation(); const statusQuery = useQuery({ queryKey: ["status"], queryFn: () => api("/api/status/"), refetchInterval: 30_000, staleTime: 15_000, }); const status = statusQuery.data; useEffect(() => { function handleKeyDown(event: KeyboardEvent) { if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === "b") { event.preventDefault(); toggleSidebar(); } } window.addEventListener("keydown", handleKeyDown); return () => window.removeEventListener("keydown", handleKeyDown); }, [toggleSidebar]); const showSidebarToggle = location.pathname === "/"; return (
J621 {showSidebarToggle ? ( ) : null}
{user ? ( <>
{user.username.slice(0, 1).toUpperCase()} {user.username}
) : ( Log in )}
); }