import { CircleUser, Globe2, Lock, Server, Settings, Users } from "lucide-react"; import type { ReactNode } from "react"; import { NavLink, useSubmit } from "react-router"; import Logo from "~/components/Logo"; import Menu from "~/components/Menu"; import { AuthSession } from "~/server/web/sessions"; import cn from "~/utils/cn"; interface Props { configAvailable: boolean; onboarding: boolean; user?: AuthSession["user"]; access: { ui: boolean; machines: boolean; dns: boolean; users: boolean; policy: boolean; settings: boolean; }; } interface LinkProps { href: string; text: string; } interface TabLinkProps { name: string; to: string; icon: ReactNode; } function TabLink({ name, to, icon }: TabLinkProps) { return (
cn( "px-3 py-2 flex items-center rounded-md text-nowrap gap-x-2.5", "after:absolute after:bottom-0 after:left-3 after:right-3", "after:h-0.5 after:bg-mist-900 dark:after:bg-mist-200", "hover:bg-mist-200 dark:hover:bg-mist-900", "focus:outline-hidden focus:ring-2 focus:ring-indigo-500/40 focus:ring-offset-1", "dark:focus:ring-indigo-400/40 dark:focus:ring-offset-mist-900", isActive ? "after:visible" : "after:invisible", ) } prefetch="intent" to={to} > {icon} {name}
); } function Link({ href, text }: LinkProps) { return ( {text} ); } export default function Header(data: Props) { const submit = useSubmit(); return (

headplane

{data.user ? ( {data.user.picture ? ( {data.user.name} ) : ( )} { if (key === "logout") { submit( {}, { method: "POST", action: "/logout", }, ); } }} >

{data.user.name}

{data.user.email}

Logout

) : undefined}
{data.access.ui && !data.onboarding ? ( ) : undefined}
); }