158 lines · 5.6 KB
import { Link, useNavigate } from "@tanstack/react-router";
import { useState } from "react";
import { signOut } from "~/fns/auth";
import { useAction } from "~/hooks/use-action";
import { useUnreadNotifications, useViewer } from "~/hooks/use-viewer";
import { Avatar } from "./ui/Primitives";
import { buttonClass } from "./ui/Button";
import { inputClass } from "./ui/Field";
import { cn } from "~/utils/cn";
import { useDismiss } from "~/hooks/use-dismiss";

const NAV = [
  { to: "/explore", label: "Explore" },
  { to: "/search", label: "Search" },
] as const;

function UserMenu({ name }: { name: string }) {
  const navigate = useNavigate();
  const [open, setOpen] = useState(false);
  const menuRef = useDismiss<HTMLDivElement>(open, () => setOpen(false));
  const logout = useAction(signOut);
  const items = [
    { to: "/$owner", params: { owner: name }, label: "Your profile" },
    { to: "/settings", params: {}, label: "Settings" },
    { to: "/settings/tokens", params: {}, label: "Access tokens" },
    { to: "/orgs/new", params: {}, label: "New organization" },
  ] as const;

  async function handleSignOut() {
    await logout.run({});
    await navigate({ to: "/" });
  }

  return (
    <div ref={menuRef} className="relative">
      <button
        type="button"
        aria-haspopup="menu"
        aria-expanded={open}
        onClick={() => setOpen((value) => !value)}