import type { FunctionComponent, Ref } from 'react'; import { useState } from 'react'; import { Tooltip, TooltipProps, Dropdown, DropdownProps, MenuToggle, MenuToggleElement, Icon, MenuToggleProps } from '@patternfly/react-core'; import EllipsisIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon'; export interface ChatbotHeaderOptionsDropdownProps extends Omit { /** Content to be displayed in the chatbot header */ children: React.ReactNode; /** Custom classname for the header component */ className?: string; /** Props spread to the PF Tooltip component wrapping the display mode dropdown */ tooltipProps?: TooltipProps; /** Aria label for menu toggle */ menuToggleAriaLabel?: string; /** Sets menu to compact styling. */ isCompact?: boolean; /** Additional props passed to toggle */ toggleProps?: MenuToggleProps; } export const ChatbotHeaderOptionsDropdown: FunctionComponent = ({ className, children, onSelect, tooltipProps, menuToggleAriaLabel = 'Chatbot options', isCompact, toggleProps, ...props }: ChatbotHeaderOptionsDropdownProps) => { const [isOptionsMenuOpen, setIsOptionsMenuOpen] = useState(false); const toggle = (toggleRef: Ref) => ( } isExpanded={isOptionsMenuOpen} onClick={() => setIsOptionsMenuOpen(!isOptionsMenuOpen)} size={isCompact ? 'sm' : undefined} {...toggleProps} /> ); return ( { onSelect && onSelect(e, value); setIsOptionsMenuOpen(false); }} onOpenChange={(isOpen) => setIsOptionsMenuOpen(isOpen)} popperProps={{ position: 'right', preventOverflow: true, appendTo: 'inline' }} shouldFocusToggleOnSelect shouldFocusFirstItemOnOpen toggle={toggle} {...props} > {children} ); }; export default ChatbotHeaderOptionsDropdown;