import { SelectHotkeyScope } from '@/ui/input/types/SelectHotkeyScope'; import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown'; import { useTheme } from '@emotion/react'; import { Placement } from '@floating-ui/react'; import { FunctionComponent, MouseEvent, ReactElement, ReactNode } from 'react'; import { IconChevronRight, IconComponent, IconDotsVertical, } from 'twenty-ui/display'; import { LightIconButton, LightIconButtonProps } from 'twenty-ui/input'; import { MenuItemAccent, MenuItemLeftContent, StyledHoverableMenuItemBase, StyledMenuItemLeftContent, } from 'twenty-ui/navigation'; export type MenuItemIconButton = { Wrapper?: FunctionComponent<{ iconButton: ReactElement }>; Icon: IconComponent; accent?: LightIconButtonProps['accent']; onClick?: (event: MouseEvent) => void; }; export type MenuItemWithOptionDropdownProps = { accent?: MenuItemAccent; className?: string; dropdownContent: ReactNode; dropdownId: string; isIconDisplayedOnHoverOnly?: boolean; isTooltipOpen?: boolean; LeftIcon?: IconComponent | null; RightIcon?: IconComponent | null; onClick?: (event: MouseEvent) => void; onMouseEnter?: (event: MouseEvent) => void; onMouseLeave?: (event: MouseEvent) => void; testId?: string; text: ReactNode; hasSubMenu?: boolean; dropdownPlacement?: Placement; }; // TODO: refactor this export const MenuItemWithOptionDropdown = ({ accent = 'default', className, isIconDisplayedOnHoverOnly = true, dropdownContent, dropdownId, LeftIcon, RightIcon, onClick, onMouseEnter, onMouseLeave, testId, text, hasSubMenu = false, dropdownPlacement = 'bottom-end', }: MenuItemWithOptionDropdownProps) => { const theme = useTheme(); const handleMenuItemClick = (event: MouseEvent) => { if (!onClick) return; event.preventDefault(); event.stopPropagation(); onClick?.(event); }; return (
} dropdownPlacement={dropdownPlacement} dropdownComponents={dropdownContent} dropdownId={dropdownId} dropdownHotkeyScope={{ scope: SelectHotkeyScope.Select }} />
{hasSubMenu && ( )}
); };