From f5816b9b315ae12ccaa6d3f065ada3c580c0a913 Mon Sep 17 00:00:00 2001 From: Ejaaz Khan Date: Fri, 5 Dec 2025 16:30:15 +0530 Subject: [PATCH] feat: move help to sidebar --- frappe/public/js/frappe/ui/menu.js | 69 +++++++++------- .../js/frappe/ui/sidebar/sidebar_header.js | 53 ++++++++++++ .../public/js/frappe/ui/toolbar/navbar.html | 45 ---------- frappe/public/js/frappe/ui/toolbar/toolbar.js | 82 ------------------- frappe/public/scss/desk/sidebar.scss | 2 + 5 files changed, 94 insertions(+), 157 deletions(-) diff --git a/frappe/public/js/frappe/ui/menu.js b/frappe/public/js/frappe/ui/menu.js index 330095832f..2eb0eaa2d2 100644 --- a/frappe/public/js/frappe/ui/menu.js +++ b/frappe/public/js/frappe/ui/menu.js @@ -31,37 +31,46 @@ frappe.ui.menu = class ContextMenu { } add_menu_item(item) { const me = this; - let item_wrapper = $(``); - if (!item.url) { - item_wrapper.on("click", function () { - item.onClick && item.onClick(); - if (!(item.items && item.items.length)) { - me.opts.onItemClick && me.opts.onItemClick(me.opts.parent); - me.hide(); - } - }); - } else if (item.items) { - $(); + let item_wrapper = $( + `` + ); + if (item?.is_divider) { + item_wrapper = $( + `` + ); } else { - $(item_wrapper).find("a").attr("href", item.url); + item_wrapper = $(``); + if (!item.url) { + item_wrapper.on("click", function () { + item.onClick && item.onClick(); + if (!(item.items && item.items.length)) { + me.opts.onItemClick && me.opts.onItemClick(me.opts.parent); + me.hide(); + } + }); + } else if (item.items) { + $(); + } else { + $(item_wrapper).find("a").attr("href", item.url); + } } item_wrapper.appendTo(this.template); if (item.items) { diff --git a/frappe/public/js/frappe/ui/sidebar/sidebar_header.js b/frappe/public/js/frappe/ui/sidebar/sidebar_header.js index 84f0b5d3ed..b817b47665 100644 --- a/frappe/public/js/frappe/ui/sidebar/sidebar_header.js +++ b/frappe/public/js/frappe/ui/sidebar/sidebar_header.js @@ -42,6 +42,14 @@ frappe.ui.SidebarHeader = class SidebarHeader { }, }, ]; + if (frappe.boot.desk_settings.notifications) { + this.dropdown_items.push({ + name: "help", + label: "Help", + icon: "info", + items: this.get_help_siblings(), + }); + } this.make(); this.setup_app_switcher(); this.populate_dropdown_menu(); @@ -67,6 +75,51 @@ frappe.ui.SidebarHeader = class SidebarHeader { return sibling_workspaces; } } + + get_help_siblings() { + const navbar_settings = frappe.boot.navbar_settings; + let help_dropdown_items = []; + + let custom_help_links = this.get_custom_help_links(); + + help_dropdown_items = custom_help_links.concat(help_dropdown_items); + + navbar_settings.help_dropdown.forEach((element) => { + let dropdown_children = { + name: element.name, + label: element.item_label, + }; + if (element.item_type === "Route") { + dropdown_children.url = element.route; + } + if (element.item_type === "Action") { + dropdown_children.onClick = function () { + frappe.utils.eval(element.action); + }; + } + help_dropdown_items.push(dropdown_children); + }); + + return help_dropdown_items; + } + + get_custom_help_links() { + let route = frappe.get_route_str(); + let breadcrumbs = route.split("/"); + + let links = []; + for (let i = 0; i < breadcrumbs.length; i++) { + let r = route.split("/", i + 1); + let key = r.join("/"); + let help_links = frappe.help.help_links[key] || []; + links = $.merge(links, help_links); + } + if (links.length) { + links.push({ is_divider: true }); + } + return links; + } + make() { $(".sidebar-header").remove(); $(".sidebar-header-menu").remove(); diff --git a/frappe/public/js/frappe/ui/toolbar/navbar.html b/frappe/public/js/frappe/ui/toolbar/navbar.html index 057dae067f..9879e4d17d 100644 --- a/frappe/public/js/frappe/ui/toolbar/navbar.html +++ b/frappe/public/js/frappe/ui/toolbar/navbar.html @@ -24,51 +24,6 @@ {% endif %}