import { Button, LinkButton, Popover } from "@cloudflare/kumo"; import { SignOut, Shield, Gear, ArrowSquareOut } from "@phosphor-icons/react"; import { Link } from "@tanstack/react-router"; import * as React from "react"; import { apiFetch } from "../lib/api/client"; import { useCurrentUser } from "../lib/api/current-user"; import { Sidebar } from "./Sidebar"; import { ThemeToggle } from "./ThemeToggle"; export type { CurrentUser } from "../lib/api/current-user"; async function handleLogout() { const res = await apiFetch("/_emdash/api/auth/logout?redirect=/_emdash/admin/login", { method: "POST", credentials: "same-origin", }); if (res.redirected) { window.location.href = res.url; } else { window.location.href = "/_emdash/admin/login"; } } /** * Admin header with mobile menu toggle and user actions. * Uses useSidebar() hook from kumo Sidebar.Provider context. */ export function Header() { const [userMenuOpen, setUserMenuOpen] = React.useState(false); const { data: user } = useCurrentUser(); // Get display name and initials const displayName = user?.name || user?.email || "User"; const initialsSource = user?.name || user?.email || "U"; const initials = (initialsSource[0] ?? "U").toUpperCase(); return (
{/* Sidebar toggle — collapses to icon mode on desktop, opens drawer on mobile */} {/* Right side actions */}
{/* View site link */} View Site {/* Theme toggle */} {/* User menu */} {/* User info */}
{user?.name || "User"}
{user?.email}
setUserMenuOpen(false)} className="flex items-center gap-2 rounded-md px-3 py-2 text-sm hover:bg-kumo-tint" > Security Settings setUserMenuOpen(false)} className="flex items-center gap-2 rounded-md px-3 py-2 text-sm hover:bg-kumo-tint" > Settings
); }