"use client"; import { createApiClient } from "@app/api"; import { Avatar, AvatarFallback } from "@app/components/ui/avatar"; import { Button } from "@app/components/ui/button"; import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator } from "@app/components/ui/command"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from "@app/components/ui/dropdown-menu"; import { Popover, PopoverContent, PopoverTrigger } from "@app/components/ui/popover"; import { useEnvContext } from "@app/hooks/useEnvContext"; import { useToast } from "@app/hooks/useToast"; import { cn, formatAxiosError } from "@app/lib/utils"; import { ListOrgsResponse } from "@server/routers/org"; import { Check, ChevronsUpDown, Laptop, LogOut, Moon, Plus, Sun } from "lucide-react"; import { useTheme } from "next-themes"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { useState } from "react"; import Enable2FaForm from "./Enable2FaForm"; import { useUserContext } from "@app/hooks/useUserContext"; import Disable2FaForm from "./Disable2FaForm"; type HeaderProps = { orgId?: string; orgs?: ListOrgsResponse["orgs"]; }; export function Header({ orgId, orgs }: HeaderProps) { const { toast } = useToast(); const { setTheme, theme } = useTheme(); const { user, updateUser } = useUserContext(); const [open, setOpen] = useState(false); const [userTheme, setUserTheme] = useState<"light" | "dark" | "system">( theme as "light" | "dark" | "system" ); const [openEnable2fa, setOpenEnable2fa] = useState(false); const [openDisable2fa, setOpenDisable2fa] = useState(false); const router = useRouter(); const api = createApiClient(useEnvContext()); function getInitials() { return user.email.substring(0, 2).toUpperCase(); } function logout() { api.post("/auth/logout") .catch((e) => { console.error("Error logging out", e); toast({ title: "Error logging out", description: formatAxiosError(e, "Error logging out") }); }) .then(() => { router.push("/auth/login"); }); } function handleThemeChange(theme: "light" | "dark" | "system") { setUserTheme(theme); setTheme(theme); } return ( <>

Signed in as

{user.email}

{!user.twoFactorEnabled && ( setOpenEnable2fa(true)} > Enable Two-factor )} {user.twoFactorEnabled && ( setOpenDisable2fa(true)} > Disable Two-factor )} Theme {(["light", "dark", "system"] as const).map( (themeOption) => ( handleThemeChange(themeOption) } > {themeOption === "light" && ( )} {themeOption === "dark" && ( )} {themeOption === "system" && ( )} {themeOption} {userTheme === themeOption && ( )} ) )} logout()}> Log out
{user.email}
Documentation Support
{orgs && ( No organizations found. { router.push("/setup"); }} > New Organization {orgs.map((org) => ( { router.push( `/${org.orgId}/settings` ); }} > {org.name} ))} )}
); } export default Header;