Skip to content

Commit 84202ce

Browse files
committed
fix: fixed inconsistent hook rendering in MenubarSubmenu
1 parent c636ccf commit 84202ce

File tree

1 file changed

+17
-22
lines changed

1 file changed

+17
-22
lines changed

client/components/Menubar/MenubarSubmenu.jsx

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -114,47 +114,42 @@ function MenubarSubmenu({
114114
const { activeIndex, menuItems, registerItem } = useContext(MenubarContext);
115115
const [submenuItems, setSubmenuItems] = useState([]);
116116
const [submenuActiveIndex, setSubmenuActiveIndex] = useState(-1);
117-
const isActive = menuItems[activeIndex] === id;
118117
const buttonRef = useRef(null);
119118

119+
const isActive = menuItems[activeIndex] === id;
120120
const triggerRole = customTriggerRole || 'menuitem';
121121
const listRole = customListRole || 'menu';
122122
const hasPopup = listRole === 'listbox' ? 'listbox' : 'menu';
123123

124-
const keyHandlers = useMemo(() => {
125-
// we only want to create the handlers if the menu is open,
126-
// otherwise return empty handlers
127-
if (!isOpen) {
128-
return {};
129-
}
130-
131-
return {
124+
const keyHandlers = useMemo(
125+
() => ({
126+
// we only want to create the handlers if the menu is open,
127+
// otherwise early return{
132128
ArrowUp: (e) => {
129+
if (!isOpen) return;
133130
e.preventDefault();
134131
e.stopPropagation();
135132

136-
setSubmenuActiveIndex((prev) => {
137-
const newIndex =
138-
(prev - 1 + submenuItems.length) % submenuItems.length;
139-
return newIndex;
140-
});
133+
setSubmenuActiveIndex(
134+
(prev) => (prev - 1 + submenuItems.length) % submenuItems.length
135+
);
141136
},
142137
ArrowDown: (e) => {
138+
if (!isOpen) return;
143139
e.preventDefault();
144140
e.stopPropagation();
145141

146-
setSubmenuActiveIndex((prev) => {
147-
const newIndex = (prev + 1) % submenuItems.length;
148-
return newIndex;
149-
});
142+
setSubmenuActiveIndex((prev) => (prev + 1) % submenuItems.length);
150143
},
151144
Enter: (e) => {
145+
if (!isOpen) return;
152146
e.preventDefault();
153147
// if submenu is open, activate the focused item
154148
// if submenu is closed, open it and focus the first item
155149
},
156150
' ': (e) => {
157151
// same as Enter
152+
if (!isOpen) return;
158153
e.preventDefault();
159154
},
160155
Escape: (e) => {
@@ -163,10 +158,10 @@ function MenubarSubmenu({
163158
Tab: (e) => {
164159
// close
165160
}
166-
};
167-
168-
// support direct access keys
169-
}, [isOpen, submenuItems.length, submenuActiveIndex]);
161+
// support direct access keys
162+
}),
163+
[isOpen, submenuItems.length, submenuActiveIndex]
164+
);
170165

171166
useKeyDownHandlers(keyHandlers);
172167

0 commit comments

Comments
 (0)