Skip to content

Commit a701f01

Browse files
authored
Merge pull request #231 from rebeccaalpert/a11y-dropdowns
fix(ChatbotHeaderSelectorDropdown/ChatbotHeaderOptionsDropdown): Should be keyboard navigable
2 parents 0a08589 + f94e914 commit a701f01

File tree

8 files changed

+17
-11
lines changed

8 files changed

+17
-11
lines changed

packages/module/patternfly-docs/content/extensions/virtual-assistant/examples/ChatbotConversationHistoryNav/ChatbotHeaderDrawer.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ export const ChatbotHeaderTitleDemo: React.FunctionComponent = () => {
7070
displayMode={displayMode}
7171
onDrawerToggle={() => setIsOpen(!isOpen)}
7272
isDrawerOpen={isOpen}
73+
setIsDrawerOpen={setIsOpen}
7374
// eslint-disable-next-line no-console
7475
onSelectActiveItem={(e, selectedItem) => console.log(`Selected history item with id ${selectedItem}`)}
7576
conversations={conversations}

packages/module/patternfly-docs/content/extensions/virtual-assistant/examples/ChatbotConversationHistoryNav/ChatbotHeaderDrawerInHeader.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ export const ChatbotHeaderTitleDemo: React.FunctionComponent = () => {
4747
displayMode={displayMode}
4848
onDrawerToggle={() => setIsOpen(!isOpen)}
4949
isDrawerOpen={isOpen}
50+
setIsDrawerOpen={setIsOpen}
5051
conversations={conversations}
5152
drawerContent={
5253
<ChatbotHeader>

packages/module/patternfly-docs/content/extensions/virtual-assistant/examples/ChatbotConversationHistoryNav/ChatbotHeaderDrawerWithActions.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ export const ChatbotHeaderTitleDemo: React.FunctionComponent = () => {
6666
displayMode={displayMode}
6767
onDrawerToggle={() => setIsDrawerOpen(!isDrawerOpen)}
6868
isDrawerOpen={isDrawerOpen}
69+
setIsDrawerOpen={setIsDrawerOpen}
6970
conversations={conversations}
7071
drawerContent={<div>Drawer content</div>}
7172
/>

packages/module/patternfly-docs/content/extensions/virtual-assistant/examples/demos/Chatbot.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ export const ChatbotDemo: React.FunctionComponent = () => {
296296
setConversations(initialConversations);
297297
}}
298298
isDrawerOpen={isDrawerOpen}
299+
setIsDrawerOpen={setIsDrawerOpen}
299300
activeItemId="1"
300301
// eslint-disable-next-line no-console
301302
onSelectActiveItem={(e, selectedItem) => console.log(`Selected history item with id ${selectedItem}`)}

packages/module/patternfly-docs/content/extensions/virtual-assistant/examples/demos/EmbeddedChatbot.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,7 @@ export const EmbeddedChatbotDemo: React.FunctionComponent = () => {
312312
setConversations(initialConversations);
313313
}}
314314
isDrawerOpen={isDrawerOpen}
315+
setIsDrawerOpen={setIsDrawerOpen}
315316
activeItemId="1"
316317
// eslint-disable-next-line no-console
317318
onSelectActiveItem={(e, selectedItem) => console.log(`Selected history item with id ${selectedItem}`)}

packages/module/src/ChatbotConversationHistoryNav/ChatbotConversationHistoryNav.tsx

+8-7
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
5050
onDrawerToggle: (event: React.KeyboardEvent | React.MouseEvent | React.TransitionEvent) => void;
5151
/** Flag to indicate whether drawer is open */
5252
isDrawerOpen: boolean;
53+
/** Function called to close drawer */
54+
setIsDrawerOpen: (bool: boolean) => void;
5355
/* itemId of the currently active item. */
5456
activeItemId?: string | number;
5557
/** Callback function for when an item is selected */
@@ -75,6 +77,7 @@ export interface ChatbotConversationHistoryNavProps extends DrawerProps {
7577
export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConversationHistoryNavProps> = ({
7678
onDrawerToggle,
7779
isDrawerOpen,
80+
setIsDrawerOpen,
7881
activeItemId,
7982
onSelectActiveItem,
8083
conversations,
@@ -180,15 +183,13 @@ export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConve
180183
// the drawer panel and deactivating the focus trap via the Escape key.
181184
const onEscape = (event: React.KeyboardEvent) => {
182185
if (event.key === 'Escape') {
183-
onDrawerToggle(event);
186+
// prevents using escape key on menu buttons from closing the panel, but I'm not sure if this is allowed
187+
if ('type' in event.target && event.target.type !== 'button') {
188+
setIsDrawerOpen(false);
189+
}
184190
}
185191
};
186192

187-
// Prevent 'Escape' key usage in main chatbot from toggling drawer; only panel content should work
188-
const onChildKeyDown = (event: React.KeyboardEvent) => {
189-
event.stopPropagation();
190-
};
191-
192193
return (
193194
<Drawer
194195
className="pf-chatbot__history"
@@ -200,7 +201,7 @@ export const ChatbotConversationHistoryNav: React.FunctionComponent<ChatbotConve
200201
{...props}
201202
>
202203
<DrawerContent panelContent={panelContent}>
203-
<DrawerContentBody onKeyDown={onChildKeyDown}>
204+
<DrawerContentBody>
204205
{isDrawerOpen && (displayMode === ChatbotDisplayMode.default || displayMode === ChatbotDisplayMode.docked) ? (
205206
<>
206207
<div className="pf-v6-c-backdrop pf-chatbot__drawer-backdrop"></div>

packages/module/src/ChatbotHeader/ChatbotHeaderOptionsDropdown.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@ export const ChatbotHeaderOptionsDropdown: React.FunctionComponent<ChatbotHeader
5959
setIsOptionsMenuOpen(false);
6060
}}
6161
onOpenChange={(isOpen) => setIsOptionsMenuOpen(isOpen)}
62-
popperProps={{ position: 'right', preventOverflow: true }}
62+
popperProps={{ position: 'right', preventOverflow: true, appendTo: 'inline' }}
6363
shouldFocusToggleOnSelect
64-
shouldFocusFirstItemOnOpen={false}
64+
shouldFocusFirstItemOnOpen
6565
toggle={toggle}
6666
{...props}
6767
>

packages/module/src/ChatbotHeader/ChatbotHeaderSelectorDropdown.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ export const ChatbotHeaderSelectorDropdown: React.FunctionComponent<ChatbotHeade
4949
setIsOptionsMenuOpen(false);
5050
}}
5151
onOpenChange={(isOpen) => setIsOptionsMenuOpen(isOpen)}
52-
popperProps={{ position: 'right' }}
52+
popperProps={{ position: 'right', appendTo: 'inline' }}
5353
shouldFocusToggleOnSelect
54-
shouldFocusFirstItemOnOpen={false}
54+
shouldFocusFirstItemOnOpen
5555
toggle={toggle}
5656
{...props}
5757
>

0 commit comments

Comments
 (0)