Skip to content

Commit 065dfbe

Browse files
committed
Close menu when window is resized
1 parent 3a03507 commit 065dfbe

File tree

4 files changed

+21
-4
lines changed

4 files changed

+21
-4
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@szhsin/react-menu",
3-
"version": "0.10.6",
3+
"version": "0.10.7",
44
"description": "React menu components",
55
"author": "Zheng Song",
66
"license": "MIT",

src/components/MenuList.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
SettingsContext,
1919
MenuListContext,
2020
initialHoverIndex,
21+
CloseReason,
2122
Keys,
2223
FocusPositions,
2324
HoverIndexActionTypes
@@ -45,6 +46,7 @@ export const MenuList = defineName(React.memo(function MenuList({
4546
children,
4647
onKeyDown,
4748
onAnimationEnd,
49+
onClose,
4850
...restProps }) {
4951

5052
const [position, setPosition] = useState({ x: 0, y: 0 });
@@ -518,6 +520,14 @@ export const MenuList = defineName(React.memo(function MenuList({
518520
if (isOpen) handlePosition();
519521
}, [isOpen, handlePosition]);
520522

523+
useEffect(() => {
524+
if (!isOpen || !onClose) return;
525+
526+
const handleResize = () => onClose({ reason: CloseReason.RESIZE });
527+
window.addEventListener('resize', handleResize);
528+
return () => window.removeEventListener('resize', handleResize);
529+
}, [isOpen, onClose]);
530+
521531
useLayoutEffect(() => {
522532
if (animation && isMounted) {
523533
if (isOpen) {

src/components/useMenuList.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useRef, useMemo } from 'react';
1+
import React, { useRef, useMemo, useCallback } from 'react';
22
import {
33
safeCall,
44
bem,
@@ -71,6 +71,10 @@ export const useMenuList = (
7171
}
7272
};
7373

74+
const handleMenuClose = useCallback(e => {
75+
safeCall(onClose, e);
76+
}, [onClose])
77+
7478
return (
7579
<div id={id}
7680
className={bem(menuContainerClass)()}
@@ -81,7 +85,9 @@ export const useMenuList = (
8185

8286
<SettingsContext.Provider value={settings}>
8387
<EventHandlersContext.Provider value={eventHandlers}>
84-
<MenuList {...menuListProps} containerRef={containerRef}>
88+
<MenuList {...menuListProps}
89+
containerRef={containerRef}
90+
onClose={handleMenuClose}>
8591
{children}
8692
</MenuList>
8793
</EventHandlersContext.Provider>

src/utils/constants.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,6 @@ export const HoverIndexActionTypes = Object.freeze({
4141
export const CloseReason = Object.freeze({
4242
'CLICK': 'click',
4343
'CANCEL': 'cancel',
44-
'BLUR': 'blur'
44+
'BLUR': 'blur',
45+
'RESIZE': 'resize'
4546
});

0 commit comments

Comments
 (0)