import type { MenuDividerProps, MenuItemProps } from '@blueprintjs/core'; import { Menu, MenuDivider, MenuItem, Tooltip } from '@blueprintjs/core'; import type { ToolbarItemProps, ToolbarPopoverItemProps, TooltipItem, } from 'react-science/ui'; import { Toolbar, TooltipHelpContent } from 'react-science/ui'; export interface ToolbarPopoverMenuItem extends MenuItemProps, Pick { menuItemType?: 'item'; data?: T; tooltip?: string | TooltipItem; } export interface ToolbarPopoverMenuDivider extends MenuDividerProps { menuItemType: 'divider'; key: string; } interface CustomToolbarPopoverItemProps extends Omit, Pick< ToolbarItemProps, 'tooltip' | 'icon' | 'tooltipProps' | 'active' | 'id' > { itemProps?: Omit; options: Array | ToolbarPopoverMenuDivider>; onClick?: (data?: T) => void; } export function ToolbarPopoverItem( props: CustomToolbarPopoverItemProps, ) { const { options, onClick, icon, tooltip, tooltipProps, active, id, itemProps, disabled, ...otherPopoverItemProps } = props; return ( {options.map((option) => { if (option.menuItemType === 'divider') { const { menuItemType, key, children, ...dividerProps } = option; return ; } const { data, text, tooltip = '', tooltipProps, disabled, menuItemType, ...otherOptions } = option; return ( ) } {...(!tooltip ? undefined : { compact: true, minimal: true, interactionKind: 'hover', placement: 'right', ...tooltipProps, })} renderTarget={({ isOpen, ...props }) => ( onClick?.(data)} {...otherOptions} {...props} /> )} /> ); })} } itemProps={{ icon, tooltip, tooltipProps, active, id, disabled, ...itemProps, }} /> ); }