From a7a423ba2f2dda40c6597dbb4f74397116c3557c Mon Sep 17 00:00:00 2001 From: akshayantony55 Date: Fri, 6 Oct 2023 01:18:08 +0530 Subject: [PATCH] fix Primefaces primefaces#5044 Menu with popup prop passed doesnot close on Escape keypress --- components/doc/common/apidoc/index.json | 8 ++++++++ components/lib/menu/Menu.js | 5 +++++ components/lib/menu/MenuBase.js | 3 ++- components/lib/menu/menu.d.ts | 5 +++++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/components/doc/common/apidoc/index.json b/components/doc/common/apidoc/index.json index 06b0772146..be24a860de 100644 --- a/components/doc/common/apidoc/index.json +++ b/components/doc/common/apidoc/index.json @@ -32331,6 +32331,14 @@ "type": "boolean", "default": "false", "description": "When enabled, it removes component related styles in the core." + }, + { + "name": "closeOnEscape", + "optional": true, + "readonly": false, + "type": "boolean", + "default": "true", + "description": "Specifies if pressing escape key should hide the Menu Popup." } ] }, diff --git a/components/lib/menu/Menu.js b/components/lib/menu/Menu.js index dd6fd45cf1..8a81d6d5e4 100644 --- a/components/lib/menu/Menu.js +++ b/components/lib/menu/Menu.js @@ -7,6 +7,7 @@ import { OverlayService } from '../overlayservice/OverlayService'; import { Portal } from '../portal/Portal'; import { DomHandler, IconUtils, ObjectUtils, UniqueComponentId, ZIndexUtils, classNames, mergeProps } from '../utils/Utils'; import { MenuBase } from './MenuBase'; +import { useOnEscapeKey } from '../../lib/hooks/Hooks'; export const Menu = React.memo( React.forwardRef((inProps, ref) => { @@ -26,6 +27,10 @@ export const Menu = React.memo( const menuRef = React.useRef(null); const targetRef = React.useRef(null); + useOnEscapeKey(targetRef, props.popup && props.closeOnEscape, (event) => { + hide(event); + }); + const [bindOverlayListener, unbindOverlayListener] = useOverlayListener({ target: targetRef, overlay: menuRef, diff --git a/components/lib/menu/MenuBase.js b/components/lib/menu/MenuBase.js index 90ab7ff9d8..8af6e17724 100644 --- a/components/lib/menu/MenuBase.js +++ b/components/lib/menu/MenuBase.js @@ -72,7 +72,8 @@ export const MenuBase = ComponentBase.extend({ transitionOptions: null, onShow: null, onHide: null, - children: undefined + children: undefined, + closeOnEscape: true }, css: { classes, diff --git a/components/lib/menu/menu.d.ts b/components/lib/menu/menu.d.ts index fe7b90eb98..eb5cd99a0d 100644 --- a/components/lib/menu/menu.d.ts +++ b/components/lib/menu/menu.d.ts @@ -154,6 +154,11 @@ export interface MenuProps extends Omit