diff --git a/frappe/public/js/frappe/ui/sidebar/sidebar_header.js b/frappe/public/js/frappe/ui/sidebar/sidebar_header.js index e013565d23..7e485948c9 100644 --- a/frappe/public/js/frappe/ui/sidebar/sidebar_header.js +++ b/frappe/public/js/frappe/ui/sidebar/sidebar_header.js @@ -5,7 +5,7 @@ frappe.ui.SidebarHeader = class SidebarHeader { this.drop_down_expanded = false; this.title = this.sidebar.sidebar_title; const me = this; - this.sibling_workspaces = this.fetch_sibling_workspaces(); + this.sibling_workspaces = this.fetch_related_icons(); this.dropdown_items = [ { name: "workspaces", @@ -81,29 +81,32 @@ frappe.ui.SidebarHeader = class SidebarHeader { this.populate_dropdown_menu(); this.setup_select_options(); } - fetch_sibling_workspaces() { + + fetch_related_icons() { let sibling_workspaces = []; if (frappe.current_app) { - let workspaces = [...frappe.current_app.workspaces]; - workspaces.splice(workspaces.indexOf(this.title), 1); + let workspaces = [...frappe.boot.desktop_icons]; + workspaces.splice( + workspaces.indexOf(frappe.utils.get_desktop_icon_by_label(this.title)), + 1 + ); workspaces.forEach((w) => { - let item = { - name: w.toLowerCase(), - label: w, - url: frappe.utils.generate_route({ - type: "Workspace", - route: frappe.router.slug(w), - }), - }; - if (frappe.utils.get_desktop_icon(w, frappe.boot.desktop_icon_style)) { - item.icon_url = frappe.utils.get_desktop_icon( - w, - frappe.boot.desktop_icon_style - ); - } else { - item.icon_html = frappe.utils.desktop_icon(w, "gray", "sm"); + if (w.app && w.app == frappe.current_app.app_name) { + let item = { + name: w.label.toLowerCase(), + label: w.label, + url: frappe.utils.get_route_for_icon(w), + }; + if (frappe.utils.get_desktop_icon(w.label, frappe.boot.desktop_icon_style)) { + item.icon_url = frappe.utils.get_desktop_icon( + w.label, + frappe.boot.desktop_icon_style + ); + } else { + item.icon_html = frappe.utils.desktop_icon(w.label, "gray", "sm"); + } + sibling_workspaces.push(item); } - sibling_workspaces.push(item); }); return sibling_workspaces; } diff --git a/frappe/public/js/frappe/utils/utils.js b/frappe/public/js/frappe/utils/utils.js index 4116607f42..09dea2006b 100644 --- a/frappe/public/js/frappe/utils/utils.js +++ b/frappe/public/js/frappe/utils/utils.js @@ -1253,6 +1253,64 @@ Object.assign(frappe.utils, { }, image_path: "/assets/frappe/images/leaflet/", }, + get_route_for_icon(desktop_icon) { + let route; + if (!desktop_icon) return; + let item = {}; + if (desktop_icon.link_type == "External" && desktop_icon.link) { + route = window.location.origin + desktop_icon.link; + } else { + let sidebar = frappe.boot.workspace_sidebar_item[desktop_icon.label.toLowerCase()]; + if (desktop_icon.link_type == "Workspace Sidebar" && sidebar) { + let first_link = sidebar.items.find((i) => i.type == "Link"); + if (first_link) { + if (first_link.link_type === "Report") { + let args = { + type: first_link.link_type, + name: first_link.link_to, + }; + + if (first_link.report || !frappe.app.sidebar.editor.edit_mode) { + args.is_query_report = + first_link.report.report_type === "Query Report" || + first_link.report.report_type == "Script Report"; + args.report_ref_doctype = first_link.report.ref_doctype; + } + + route = frappe.utils.generate_route(args); + } else if (first_link.link_type == "Workspace") { + let workspaces = frappe.workspaces[frappe.router.slug(first_link.link_to)]; + if (workspaces) { + if (workspaces.public) { + route = "/desk/" + frappe.router.slug(first_link.link_to); + } else { + route = "/desk/private/" + frappe.router.slug(workspaces.title); + } + } + + if (first_link.route) { + route = first_link.route; + } + } else if (first_link.link_type === "URL") { + route = first_link.url; + } else if (first_link.link_type == "Page" && first_link.route_options) { + route = frappe.utils.generate_route({ + type: first_link.link_type, + name: first_link.link_to, + route_options: JSON.parse(first_link.route_options), + }); + } else { + route = frappe.utils.generate_route({ + type: first_link.link_type, + name: first_link.link_to, + tab: first_link.tab, + }); + } + } + } + } + return route; + }, desktop_icon(label, color, size) { let letter = label.charAt(0).toUpperCase(); let icon_size = size ? size : "md";