@@ -224,6 +224,11 @@ const Menu: React.FC<MenuProps> = props => {
224224 postState : keys => keys || EMPTY_LIST ,
225225 } ) ;
226226
227+ const triggerOpenKeys = ( keys : string [ ] ) => {
228+ setMergedOpenKeys ( keys ) ;
229+ onOpenChange ?.( keys ) ;
230+ } ;
231+
227232 // >>>>> Cache & Reset open keys when inlineCollapsed changed
228233 const [ inlineCacheOpenKeys , setInlineCacheOpenKeys ] =
229234 React . useState ( mergedOpenKeys ) ;
@@ -249,11 +254,8 @@ const Menu: React.FC<MenuProps> = props => {
249254 if ( isInlineMode ) {
250255 setMergedOpenKeys ( inlineCacheOpenKeys ) ;
251256 } else {
252- const empty = [ ] ;
253- setMergedOpenKeys ( empty ) ;
254-
255257 // Trigger open event in case its in control
256- onOpenChange ?. ( empty ) ;
258+ triggerOpenKeys ( EMPTY_LIST ) ;
257259 }
258260 } , [ isInlineMode ] ) ;
259261
@@ -338,10 +340,12 @@ const Menu: React.FC<MenuProps> = props => {
338340 const exist = mergedSelectKeys . includes ( targetKey ) ;
339341 let newSelectKeys : string [ ] ;
340342
341- if ( exist ) {
342- newSelectKeys = mergedSelectKeys . filter ( key => key !== targetKey ) ;
343- } else if ( multiple ) {
344- newSelectKeys = [ ...mergedSelectKeys , targetKey ] ;
343+ if ( multiple ) {
344+ if ( exist ) {
345+ newSelectKeys = mergedSelectKeys . filter ( key => key !== targetKey ) ;
346+ } else {
347+ newSelectKeys = [ ...mergedSelectKeys , targetKey ] ;
348+ }
345349 } else {
346350 newSelectKeys = [ targetKey ] ;
347351 }
@@ -359,6 +363,10 @@ const Menu: React.FC<MenuProps> = props => {
359363 } else {
360364 onSelect ?.( selectInfo ) ;
361365 }
366+
367+ if ( ! multiple && mergedOpenKeys . length ) {
368+ onOpenChange ?.( EMPTY_LIST ) ;
369+ }
362370 } ;
363371
364372 // ========================= Open =========================
@@ -382,8 +390,7 @@ const Menu: React.FC<MenuProps> = props => {
382390 }
383391
384392 if ( ! shallowEqual ( mergedOpenKeys , newOpenKeys ) ) {
385- setMergedOpenKeys ( newOpenKeys ) ;
386- onOpenChange ?.( newOpenKeys ) ;
393+ triggerOpenKeys ( newOpenKeys ) ;
387394 }
388395 } ) ;
389396
0 commit comments