@@ -12,6 +12,7 @@ import React, {
1212 useMemo ,
1313 ReactNode ,
1414 useState ,
15+ useId ,
1516} from 'react' ;
1617import classnames from 'classnames' ;
1718import { Icon } from './Icon' ;
@@ -69,7 +70,9 @@ export const DropdownMenuHandlerContext = createContext<DropdownMenuHandler>(
6970) ;
7071
7172type OpenSubmenuContext = {
72- openSubmenuKeys : { [ key : string ] : { isOpen : boolean ; level : number } } ;
73+ openSubmenuKeys : {
74+ [ key : string ] : { isOpen : boolean ; level : number } | undefined ;
75+ } ;
7376 handleSubmenuOpen : ( key : string , level : number ) => void ;
7477} ;
7578
@@ -125,6 +128,8 @@ export const DropdownMenuItem: FC<DropdownMenuItemProps> = (props) => {
125128
126129 const { openSubmenuKeys, handleSubmenuOpen } = useContext ( OpenSubmenuContext ) ;
127130
131+ const submenuKey = useId ( ) ;
132+
128133 const onKeyDown = useEventCallback ( ( e : KeyboardEvent < HTMLAnchorElement > ) => {
129134 if ( e . keyCode === 13 || e . keyCode === 32 ) {
130135 // return or space
@@ -176,8 +181,8 @@ export const DropdownMenuItem: FC<DropdownMenuItemProps> = (props) => {
176181
177182 const onMenuItemClick = useEventCallback (
178183 ( e : SyntheticEvent < HTMLAnchorElement > ) => {
179- if ( submenu && eventKey !== undefined ) {
180- handleSubmenuOpen ( eventKey . toString ( ) , level + 1 ) ;
184+ if ( submenu ) {
185+ handleSubmenuOpen ( submenuKey , level + 1 ) ;
181186 return ;
182187 }
183188 onClick ?.( e ) ;
@@ -211,8 +216,7 @@ export const DropdownMenuItem: FC<DropdownMenuItemProps> = (props) => {
211216 </ DropdownSubmenu >
212217 ) : undefined ) ;
213218
214- const submenuExpanded =
215- eventKey !== undefined ? openSubmenuKeys [ eventKey ] ?. isOpen ?? false : false ;
219+ const submenuExpanded = openSubmenuKeys [ submenuKey ] ?. isOpen ?? false ;
216220
217221 const menuItemClass = classnames (
218222 'slds-dropdown__item' ,
0 commit comments