fix: show desktop icons instead of workspaces

This commit is contained in:
sokumon 2026-01-07 03:37:35 +05:30
parent a1a7e84b5e
commit 0bd2803c0e
2 changed files with 81 additions and 20 deletions

View file

@ -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;
}

View file

@ -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";