import React, { useRef } from 'react'; import { css } from '@leafygreen-ui/emotion'; import { Menu, MenuItem } from '@leafygreen-ui/menu'; import { useOnElementClick } from '../../on-element-click-provider'; import { ActiveNavElement, NavElement, URLS } from '../../types'; import { UserMenuTrigger } from './UserMenuTrigger'; const onPremMenuWrapper = css` display: inline-block; position: relative; z-index: 0; `; interface OnPremUserMenuProps { /** * The current user's first and last name, or username if unavailable. */ name: string; /** * Whether or not the OnPremUserMenu is expanded. */ open: boolean; /** * A function to update the open state of the OnPremUserMenu. */ setOpen: React.Dispatch>; /** * Object that supplies URL overrides to OnPremUserMenu component. * Shape: { onPrem: { profile, mfa, personalization, invitations, organizations, publicApiAccess, featureRequest }} */ urls: Pick; /** * Whether or not multifactor authentication is permitted in the current enivronment. */ mfa: boolean; /** * Determines what nav item is currently active. */ activeNav?: NavElement; /** * Callback invoked after the user clicks log out. */ onLogout?: React.MouseEventHandler; } /** * # OnPremUserMenu * * OnPremUserMenu component * * ``` ``` * @param props.name The current user's first and last name, or username if unavailable. * @param props.open Whether or not the OnPremUserMenu is expanded. * @param props.setOpen A function to update the open state of the OnPremUserMenu. * @param props.urls Object that supplies URL overrides to UserMenu component. * @param props.mfa Whether or not multifactor authentication is permitted in the current enivronment. * @param props.activeNav Determines what nav item is currently active. * @param props.onLogout Callback fired when a user logs out. */ export function OnPremUserMenu({ name, open, setOpen, urls, mfa, activeNav, onLogout: onLogoutProp, }: OnPremUserMenuProps) { const onElementClick = useOnElementClick(); const triggerRef = useRef(null); const toggleOpen = () => { setOpen(curr => !curr); }; const onLogout = (e: React.MouseEvent) => { if (onLogoutProp) { return onLogoutProp(e); } else { return onElementClick(NavElement.Logout)(e); } }; return (
setOpen(false)} > Profile {mfa && ( setOpen(false)} > Two-factor Authentication )} setOpen(false)} > Personalization setOpen(false)} > Invitations setOpen(false)} > Organizations setOpen(false)} > Public API Access setOpen(false)} > Feature Request Log out
); }