diff --git a/frappe/boot.py b/frappe/boot.py index 0cab7a060c..83c9902020 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -130,7 +130,7 @@ def load_desktop_data(bootinfo): from frappe.desk.desktop import get_workspace_sidebar_items bootinfo.allowed_workspaces = get_workspace_sidebar_items().get("pages") - bootinfo.module_page_map = get_controller("Workspace").get_module_page_map() + bootinfo.module_wise_workspaces = get_controller("Workspace").get_module_wise_workspaces() bootinfo.dashboards = frappe.get_all("Dashboard") diff --git a/frappe/desk/doctype/workspace/workspace.py b/frappe/desk/doctype/workspace/workspace.py index f7d9e8ac3e..0866795538 100644 --- a/frappe/desk/doctype/workspace/workspace.py +++ b/frappe/desk/doctype/workspace/workspace.py @@ -1,6 +1,7 @@ # Copyright (c) 2020, Frappe Technologies and contributors # License: MIT. See LICENSE +from collections import defaultdict from json import loads import frappe @@ -49,12 +50,22 @@ class Workspace(Document): delete_folder(self.module, "Workspace", self.title) @staticmethod - def get_module_page_map(): - pages = frappe.get_all( - "Workspace", fields=["name", "module"], filters={"for_user": ""}, as_list=1 + def get_module_wise_workspaces(): + workspaces = frappe.get_all( + "Workspace", + fields=["name", "module"], + filters={"for_user": "", "public": 1}, + order_by="creation", ) - return {page[1]: page[0] for page in pages if page[1]} + module_workspaces = defaultdict(list) + + for workspace in workspaces: + if not workspace.module: + continue + module_workspaces[workspace.module].append(workspace.name) + + return module_workspaces def get_link_groups(self): cards = [] diff --git a/frappe/public/js/frappe/views/breadcrumbs.js b/frappe/public/js/frappe/views/breadcrumbs.js index 74560cebbc..9b1107de1c 100644 --- a/frappe/public/js/frappe/views/breadcrumbs.js +++ b/frappe/public/js/frappe/views/breadcrumbs.js @@ -82,25 +82,33 @@ frappe.breadcrumbs = { this.$breadcrumbs.append(html); }, + get last_route() { + return frappe.route_history.slice(-2)[0]; + }, + set_workspace_breadcrumb(breadcrumbs) { - // get preferred module for breadcrumbs, based on sent via module + // get preferred module for breadcrumbs, based on history and module if (!breadcrumbs.workspace) { this.set_workspace(breadcrumbs); } - - if (breadcrumbs.workspace) { - if ( - !breadcrumbs.module_info.blocked && - frappe.visible_modules.includes(breadcrumbs.module_info.module) - ) { - $( - `