Skip to content

Commit e7baaf0

Browse files
committed
Rethink behavior on button clicks
1 parent e0166ee commit e7baaf0

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

src/use-dropdown-menu.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export default function useDropdownMenu(itemCount: number) {
77
const [isOpen, setIsOpen] = useState<boolean>(false);
88
const currentFocusIndex = useRef<number | null>(null);
99
const firstRun = useRef(true);
10+
const clickedOpen = useRef(false);
1011

1112
// Create refs
1213
const buttonRef = useRef<HTMLButtonElement>(null);
@@ -31,8 +32,10 @@ export default function useDropdownMenu(itemCount: number) {
3132
}
3233

3334
// If the menu is currently open focus on the first item in the menu
34-
if (isOpen) {
35+
if (isOpen && !clickedOpen.current) {
3536
moveFocus(0);
37+
} else if (!isOpen) {
38+
clickedOpen.current = false;
3639
}
3740
}, [isOpen]);
3841

@@ -75,16 +78,19 @@ export default function useDropdownMenu(itemCount: number) {
7578
if (isKeyboardEvent(e)) {
7679
const { key } = e;
7780

78-
if (key !== 'Tab' && key !== 'Shift') {
79-
e.preventDefault();
81+
if (!['Enter', ' ', 'Tab', 'ArrowDown'].includes(key)) {
82+
return;
8083
}
8184

82-
if (key === 'Enter' || key === ' ') {
85+
if ((key === 'Tab' || key === 'ArrowDown') && clickedOpen.current && isOpen) {
86+
e.preventDefault();
87+
moveFocus(0);
88+
} else if (key !== 'Tab') {
89+
e.preventDefault();
8390
setIsOpen(true);
84-
} else if (key === 'Tab') {
85-
setIsOpen(false);
8691
}
8792
} else {
93+
clickedOpen.current = !isOpen;
8894
setIsOpen(!isOpen);
8995
}
9096
};

0 commit comments

Comments
 (0)