// ============================================================================ // Chatbot Header - Chatbot Conversation History Nav // ============================================================================ import type { MouseEvent, FunctionComponent, Ref } from 'react'; import { useState } from 'react'; // Import PatternFly components import { MenuToggleElement, Tooltip, MenuToggle, Dropdown, DropdownProps } from '@patternfly/react-core'; import EllipsisIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon'; export interface ChatbotConversationHistoryDropdownProps extends Omit { /** Dropdown items rendered in conversation settings dropdown */ menuItems: React.ReactNode; /** Optional classname applied to conversation settings dropdown */ menuClassName?: string; /** Tooltip content applied to conversation settings dropdown */ label?: string; /** Aria-label applied to conversation settings dropdown */ 'aria-label'?: string; /** Callback for when user selects item. */ onSelect?: (event?: React.MouseEvent, value?: string | number) => void; /** Id applied to dropdown menu toggle */ id?: string; } export const ChatbotConversationHistoryDropdown: FunctionComponent = ({ menuItems, menuClassName, onSelect, label = 'Conversation options', 'aria-label': ariaLabel, id }: ChatbotConversationHistoryDropdownProps) => { const [isOpen, setIsOpen] = useState(false); const toggle = (toggleRef: Ref) => ( setIsOpen(!isOpen)} id={id} role="menuitem" > ); return ( { onSelect?.(props); setIsOpen((prev) => !prev); }} onOpenChange={(isOpen) => setIsOpen(isOpen)} popperProps={{ position: 'right' }} shouldFocusToggleOnSelect shouldFocusFirstItemOnOpen toggle={toggle} > {menuItems} ); }; export default ChatbotConversationHistoryDropdown;