Skip to content

Commit d86c970

Browse files
fix: ActionBar overflow menu not closing on select (#7535)
1 parent c87db98 commit d86c970

File tree

4 files changed

+16
-39
lines changed

4 files changed

+16
-39
lines changed

.changeset/sixty-keys-perform.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@primer/react": patch
3+
---
4+
5+
fix: ActionBar overflow menu not closing on select

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/react/src/ActionBar/ActionBar.stories.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,11 @@ export const Default = () => (
6767
<ActionBar.IconButton icon={QuoteIcon} aria-label="Insert Quote"></ActionBar.IconButton>
6868
<ActionBar.IconButton icon={ListUnorderedIcon} aria-label="Unordered List"></ActionBar.IconButton>
6969
<ActionBar.IconButton icon={ListOrderedIcon} aria-label="Ordered List"></ActionBar.IconButton>
70-
<ActionBar.IconButton icon={TasklistIcon} aria-label="Task List"></ActionBar.IconButton>
70+
<ActionBar.IconButton
71+
icon={TasklistIcon}
72+
aria-label="Task List"
73+
onClick={() => alert('Task List clicked')}
74+
></ActionBar.IconButton>
7175
</ActionBar>
7276
)
7377

packages/react/src/ActionBar/ActionBar.tsx

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@ import React, {useState, useCallback, useRef, forwardRef, useId} from 'react'
33
import {KebabHorizontalIcon} from '@primer/octicons-react'
44
import {ActionList, type ActionListItemProps} from '../ActionList'
55
import useIsomorphicLayoutEffect from '../utils/useIsomorphicLayoutEffect'
6-
import {useOnEscapePress} from '../hooks/useOnEscapePress'
76
import type {ResizeObserverEntry} from '../hooks/useResizeObserver'
87
import {useResizeObserver} from '../hooks/useResizeObserver'
98

10-
import {useOnOutsideClick} from '../hooks/useOnOutsideClick'
119
import type {IconButtonProps} from '../Button'
1210
import {IconButton} from '../Button'
1311
import {ActionMenu} from '../ActionMenu'
@@ -322,8 +320,6 @@ export const ActionBar: React.FC<React.PropsWithChildren<ActionBarProps>> = prop
322320
if (!Number.isNaN(parsed)) setComputedGap(parsed)
323321
}, [gap])
324322
const moreMenuRef = useRef<HTMLLIElement>(null)
325-
const moreMenuBtnRef = useRef<HTMLButtonElement>(null)
326-
const containerRef = React.useRef<HTMLUListElement>(null)
327323

328324
useResizeObserver((resizeObserverEntries: ResizeObserverEntry[]) => {
329325
const navWidth = resizeObserverEntries[0].contentRect.width
@@ -343,29 +339,6 @@ export const ActionBar: React.FC<React.PropsWithChildren<ActionBarProps>> = prop
343339
[menuItemIds],
344340
)
345341

346-
const [isWidgetOpen, setIsWidgetOpen] = useState(false)
347-
348-
const closeOverlay = React.useCallback(() => {
349-
setIsWidgetOpen(false)
350-
}, [setIsWidgetOpen])
351-
352-
const focusOnMoreMenuBtn = React.useCallback(() => {
353-
moreMenuBtnRef.current?.focus()
354-
}, [])
355-
356-
useOnEscapePress(
357-
(event: KeyboardEvent) => {
358-
if (isWidgetOpen) {
359-
event.preventDefault()
360-
closeOverlay()
361-
focusOnMoreMenuBtn()
362-
}
363-
},
364-
[isWidgetOpen],
365-
)
366-
367-
useOnOutsideClick({onClickOutside: closeOverlay, containerRef, ignoreClickRefs: [moreMenuBtnRef]})
368-
369342
useFocusZone({
370343
containerRef: listRef,
371344
bindKeys: FocusKeys.ArrowHorizontal | FocusKeys.HomeAndEnd,
@@ -415,11 +388,8 @@ export const ActionBar: React.FC<React.PropsWithChildren<ActionBarProps>> = prop
415388
return (
416389
<ActionList.Item
417390
key={label}
418-
// eslint-disable-next-line primer-react/prefer-action-list-item-onselect
419-
onClick={(event: React.MouseEvent<HTMLLIElement, MouseEvent>) => {
420-
closeOverlay()
421-
focusOnMoreMenuBtn()
422-
typeof onClick === 'function' && onClick(event)
391+
onSelect={event => {
392+
typeof onClick === 'function' && onClick(event as React.MouseEvent<HTMLElement>)
423393
}}
424394
disabled={disabled}
425395
>
@@ -469,8 +439,6 @@ export const ActionBar: React.FC<React.PropsWithChildren<ActionBarProps>> = prop
469439
<ActionList.Item
470440
key={key}
471441
onSelect={event => {
472-
closeOverlay()
473-
focusOnMoreMenuBtn()
474442
typeof onClick === 'function' && onClick(event as React.MouseEvent<HTMLElement>)
475443
}}
476444
disabled={disabled}

0 commit comments

Comments
 (0)