From 9411ac63ae9f587738dc85a1e3bb3ca6fc2cd07f Mon Sep 17 00:00:00 2001 From: hinzzx Date: Fri, 23 Jun 2023 11:34:14 +0300 Subject: [PATCH] feat(ui5-menu): add close delay --- packages/main/src/Menu.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/main/src/Menu.ts b/packages/main/src/Menu.ts index 2108efb7f2b1..81148b10ad46 100644 --- a/packages/main/src/Menu.ts +++ b/packages/main/src/Menu.ts @@ -483,6 +483,10 @@ class Menu extends UI5Element { } _openItemSubMenu(item: MenuItem, opener: HTMLElement, actionId: string) { + const mainMenu = this._findMainMenu(item); + mainMenu.fireEvent("before-open", { + item, + }); item._subMenu!.showAt(opener); item._preventSubMenuClose = true; this._openedSubMenuItem = item; @@ -545,6 +549,16 @@ class Menu extends UI5Element { }, 300); } + startCloseTimeout(item: MenuItem) { + // If theres already a timeout, clears it + this.clearCloseTimeout(item); + + // Sets the new timeout + this.unhoverTimeouts[item.id] = window.setTimeout(() => { + this._closeItemSubMenu(item); + }, 400); + } + clearOpenTimeout(item: MenuItem) { if (this.hoverTimeouts[item.id]) { clearTimeout(this.hoverTimeouts[item.id]); @@ -594,7 +608,7 @@ class Menu extends UI5Element { if (item && item.hasSubmenu && item._subMenu) { // try to close the sub-menu item._preventSubMenuClose = false; - this.clearCloseTimeout(item); + this.startCloseTimeout(item); } } }