import {useAuth} from "Frontend/util/auth"; import {GearFine, Question, SignOut, User} from "@phosphor-icons/react"; import {Dropdown, DropdownItem, DropdownMenu, DropdownTrigger} from "@heroui/react"; import {useNavigate} from "react-router"; import {ConfigEndpoint} from "Frontend/generated/endpoints"; import Avatar from "Frontend/components/general/Avatar"; import {CollectionElement} from "@react-types/shared"; import {isAdmin} from "Frontend/util/utils"; export default function ProfileMenu() { const auth = useAuth(); const navigate = useNavigate(); async function logout() { if (auth.state.user?.managedBySso) { window.location.href = (await ConfigEndpoint.getLogoutUrl()) || "/"; } else { await auth.logout(); } } const profileMenuItems = [ { label: "My Profile", icon: , onClick: () => navigate("/settings/profile") }, { label: "Administration", icon: , onClick: () => navigate("/administration/libraries"), showIf: isAdmin(auth) }, { label: "Help", icon: , onClick: () => window.open("https://gameyfin.org", "_blank") }, { label: "Sign Out", icon: , onClick: logout, color: "primary" }, ]; // @ts-ignore return ( {/* div is necessary so dropdown menu will appear in the correct place */} Signed in as {auth.state.user?.username} {profileMenuItems.filter(item => item.showIf !== false).map(({label, icon, onClick, color}) => { return ( {icon}} /* @ts-ignore */ color={color ? color : ""} className={`text-${color} hover:bg-primary/20`} textValue={label} > {label} ); }) as unknown as CollectionElement} ); }
Signed in as {auth.state.user?.username}