diff --git a/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.json b/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.json index b2ffbdc56c..371c6564df 100644 --- a/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.json +++ b/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.json @@ -72,7 +72,7 @@ "grid_page_length": 50, "index_web_pages_for_search": 1, "links": [], - "modified": "2026-01-10 22:12:40.504715", + "modified": "2026-02-02 12:35:38.009501", "modified_by": "Administrator", "module": "Desk", "name": "Workspace Sidebar", @@ -90,6 +90,18 @@ "role": "System Manager", "share": 1, "write": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Desk User", + "share": 1, + "write": 1 } ], "row_format": "Dynamic", diff --git a/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py b/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py index 7360fdc24f..efa7f0795e 100644 --- a/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py +++ b/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py @@ -54,7 +54,9 @@ class WorkspaceSidebar(Document): self.set_module() def export_sidebar(self): - allow_export = self.app and not frappe.flags.in_import and frappe.conf.developer_mode + allow_export = ( + self.app and self.standard and not frappe.flags.in_import and frappe.conf.developer_mode + ) if allow_export: folder_path = create_directory_on_app_path("workspace_sidebar", self.app) file_path = os.path.join(folder_path, f"{frappe.scrub(self.title)}.json") diff --git a/frappe/public/js/frappe/router.js b/frappe/public/js/frappe/router.js index 4d45ed853a..d98700073e 100644 --- a/frappe/public/js/frappe/router.js +++ b/frappe/public/js/frappe/router.js @@ -173,7 +173,8 @@ frappe.router = { route = ["Workspaces", frappe.workspaces[route[0]].name]; } else if (route[0] == "private") { // private workspace - let private_workspace = route[1] && `${route[1]}-${frappe.user.name.toLowerCase()}`; + let private_workspace = + route[1] && frappe.router.slug(`${route[1]}-${frappe.user.name.toLowerCase()}`); if (!frappe.workspaces[private_workspace]) { frappe.msgprint( __("Workspace {0} does not exist", [ diff --git a/frappe/public/js/frappe/ui/sidebar/sidebar.js b/frappe/public/js/frappe/ui/sidebar/sidebar.js index 2fdef90114..56fc8edb51 100644 --- a/frappe/public/js/frappe/ui/sidebar/sidebar.js +++ b/frappe/public/js/frappe/ui/sidebar/sidebar.js @@ -31,6 +31,7 @@ frappe.ui.Sidebar = class Sidebar { this.add_standard_items(); this.sidebar_data = frappe.boot.workspace_sidebar_item[this.workspace_title]; this.workspace_sidebar_items = this.sidebar_data.items; + this.all_sidebar_items = frappe.boot.workspace_sidebar_item; if (this.edit_mode) { this.workspace_sidebar_items = this.editor.new_sidebar_items; } @@ -551,7 +552,6 @@ frappe.ui.Sidebar = class Sidebar { let sidebars = []; Object.entries(this.all_sidebar_items).forEach(([name, sidebar]) => { const { items, label } = sidebar; - if (label.includes("My Workspaces")) return; items.forEach((item) => { if (item.link_to === link_to) { sidebars.push(label || name); diff --git a/frappe/public/js/frappe/ui/sidebar/sidebar_item.js b/frappe/public/js/frappe/ui/sidebar/sidebar_item.js index 760b81e193..6fad636ee5 100644 --- a/frappe/public/js/frappe/ui/sidebar/sidebar_item.js +++ b/frappe/public/js/frappe/ui/sidebar/sidebar_item.js @@ -36,7 +36,7 @@ frappe.ui.sidebar_item.TypeLink = class SidebarItem { if (workspaces.public) { path = "/desk/" + frappe.router.slug(this.item.link_to); } else { - path = "/desk/private/" + frappe.router.slug(workspaces.title); + path = "/desk/private/" + frappe.router.slug(this.item.link_to); } if (this.item.route) {