"use client"; import type { User } from "@/common/user"; import { userStore } from "@/common/user"; import { webStore } from "@/common/webstore"; import { LoginButton } from "@/components/login-button"; import { Avatar, AvatarImage } from "@/components/ui/avatar"; import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"; import { authorize } from "@/utils/authorize-user"; import Link from "next/link"; import { useEffect, useState } from "react"; import { HiBookOpen, HiChevronDown, HiIdentification, HiLogout, HiSparkles, HiSupport, HiTerminal, HiViewGridAdd } from "react-icons/hi"; import { Skeleton } from "./ui/skeleton"; enum State { Idle = 0, Loading = 1, Failure = 2 } export function Header() { const [state, setState] = useState(State.Loading); const user = userStore((s) => s); useEffect(() => { authorize({ setState }) .then((_user) => { userStore.setState({ ...(_user || {}), __fetched: true }); }); webStore.setState({ width: window?.innerWidth }); }, []); if (state === State.Failure) { return ; } if (state === State.Loading || !user) { return (
); } return ; } function Dropdown({ user }: { user: User; }) { return (
{user.globalName || user.username} {user.email}
Dashboard Profile {user.premium ? "Billing" : "Premium"} Support Documentation Developer API Logout
); }