From ec922e8e762bb2230cb25694ebd3be66a36da83d Mon Sep 17 00:00:00 2001 From: sokumon Date: Tue, 6 Jan 2026 18:24:56 +0530 Subject: [PATCH] fix: open one nested menu at a time --- frappe/public/js/frappe/ui/menu.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/frappe/public/js/frappe/ui/menu.js b/frappe/public/js/frappe/ui/menu.js index 1db826380e..aa4b5f7240 100644 --- a/frappe/public/js/frappe/ui/menu.js +++ b/frappe/public/js/frappe/ui/menu.js @@ -9,6 +9,7 @@ frappe.ui.menu = class ContextMenu { this.open_on_left = opts.open_on_left; this.size = opts.size; this.opts = opts; + this.nested_menus = []; } make() { @@ -77,6 +78,9 @@ frappe.ui.menu = class ContextMenu { me.opts.onItemClick && me.opts.onItemClick(me.opts.parent); me.hide(); } + me.nested_menus.forEach((menu) => { + menu.hide(); + }); }); } else if (item.items) { $(); @@ -86,11 +90,13 @@ frappe.ui.menu = class ContextMenu { } item_wrapper.appendTo(this.template); if (item.items) { - this.handle_nested_menu(item_wrapper, item); + let nested_menu = this.handle_nested_menu(item_wrapper, item); + this.nested_menus.push(nested_menu); } } + handle_nested_menu(item_wrapper, item) { - frappe.ui.create_menu({ + return frappe.ui.create_menu({ parent: item_wrapper, menu_items: item.items, nested: true, @@ -99,7 +105,6 @@ frappe.ui.menu = class ContextMenu { } show(parent, event) { // this.close_all_other_menu(); - this.make(); const offset = $(parent).offset(); @@ -233,6 +238,7 @@ frappe.ui.create_menu = function (opts) { opts.onHide && opts.onHide(opts.parent); } }); + return context_menu; }; function close_all_open_menus() {