fix #4620 Overlaypanel: Overlay panel doesnot close on escape button click

pull/4621/head
akshayantony55 2023-10-16 00:56:56 +05:30
parent c0bf815e92
commit 02cbc1e98d
3 changed files with 31 additions and 0 deletions

View File

@ -33,6 +33,10 @@ export default {
closeIcon: {
type: String,
default: undefined
},
closeOnEscape: {
type: Boolean,
default: true
}
},
style: OverlayPanelStyle,

View File

@ -163,6 +163,11 @@ export interface OverlayPanelProps {
* @defaultValue false
*/
unstyled?: boolean;
/**
* Specifies if pressing escape key should hide the dialog.
* @defaultValue true
*/
closeOnEscape?: boolean | undefined;
}
/**

View File

@ -58,6 +58,7 @@ export default {
container: null,
styleElement: null,
overlayEventListener: null,
documentKeydownListener: null,
beforeUnmount() {
if (this.dismissable) {
this.unbindOutsideClickListener();
@ -129,6 +130,10 @@ export default {
this.focus();
OverlayEventBus.on('overlay-click', this.overlayEventListener);
this.$emit('show');
if (this.closeOnEscape) {
this.bindDocumentKeyDownListener();
}
},
onLeave() {
this.unbindOutsideClickListener();
@ -186,6 +191,23 @@ export default {
focusTarget.focus();
}
},
onKeyDown(event) {
if (event.code === 'Escape' && this.closeOnEscape) {
this.visible = false;
}
},
bindDocumentKeyDownListener() {
if (!this.documentKeydownListener) {
this.documentKeydownListener = this.onKeyDown.bind(this);
window.document.addEventListener('keydown', this.documentKeydownListener);
}
},
unbindDocumentKeyDownListener() {
if (this.documentKeydownListener) {
window.document.removeEventListener('keydown', this.documentKeydownListener);
this.documentKeydownListener = null;
}
},
bindOutsideClickListener() {
if (!this.outsideClickListener && DomHandler.isClient()) {
this.outsideClickListener = (event) => {