import { useState, FunctionComponent } from 'react'; import { ChatbotDisplayMode } from '@patternfly/chatbot/dist/dynamic/Chatbot'; import ChatbotConversationHistoryNav, { Conversation } from '@patternfly/chatbot/dist/dynamic/ChatbotConversationHistoryNav'; import { Checkbox } from '@patternfly/react-core'; import { SearchIcon } from '@patternfly/react-icons'; const initialConversations: { [key: string]: Conversation[] } = { Today: [{ id: '1', text: 'Red Hat products and services' }], 'This month': [ { id: '2', text: 'Enterprise Linux installation and setup' }, { id: '3', text: 'Troubleshoot system crash' } ], March: [ { id: '4', text: 'Ansible security and updates' }, { id: '5', text: 'Red Hat certification' }, { id: '6', text: 'Lightspeed user documentation' } ], February: [ { id: '7', text: 'Crashing pod assistance' }, { id: '8', text: 'OpenShift AI pipelines' }, { id: '9', text: 'Updating subscription plan' }, { id: '10', text: 'Red Hat licensing options' } ], January: [ { id: '11', text: 'RHEL system performance' }, { id: '12', text: 'Manage user accounts' } ] }; const NO_RESULTS = { bodyText: 'Adjust your search query and try again. Check your spelling or try a more general term.', titleText: 'No results found', icon: SearchIcon }; export const ChatbotHeaderDrawerResizableDemo: FunctionComponent = () => { const [isOpen, setIsOpen] = useState(true); const [conversations, setConversations] = useState( initialConversations ); const [showNoResults, setShowNoResults] = useState(false); const displayMode = ChatbotDisplayMode.embedded; const findMatchingItems = (targetValue: string) => { const filteredConversations = Object.entries(initialConversations).reduce((acc, [key, items]) => { const filteredItems = items.filter((item) => item.text.toLowerCase().includes(targetValue.toLowerCase())); if (filteredItems.length > 0) { acc[key] = filteredItems; } return acc; }, {}); // append message if no items are found if (Object.keys(filteredConversations).length === 0) { setShowNoResults(true); } else { setShowNoResults(false); } return filteredConversations; }; return ( <> { setIsOpen(!isOpen); setConversations(initialConversations); }} id="drawer-visible" name="drawer-visible" /> setIsOpen(!isOpen)} isDrawerOpen={isOpen} setIsDrawerOpen={setIsOpen} // eslint-disable-next-line no-console onSelectActiveItem={(e, selectedItem) => console.log(`Selected history item with id ${selectedItem}`)} conversations={conversations} onNewChat={() => { setIsOpen(!isOpen); }} handleTextInputChange={(value: string) => { if (value === '') { setConversations(initialConversations); } // this is where you would perform search on the items in the drawer // and update the state const newConversations: { [key: string]: Conversation[] } = findMatchingItems(value); setConversations(newConversations); }} drawerContent={
Drawer content
} drawerPanelContentProps={{ isResizable: true, minSize: '200px' }} emptyState={showNoResults ? NO_RESULTS : undefined} /> ); };