diff --git a/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.js b/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.js index e83985f52d..d052b74091 100644 --- a/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.js +++ b/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.js @@ -27,10 +27,10 @@ frappe.ui.form.on("Workspace Sidebar Item", { let row = locals[cdt][cdn]; let grid = frm.fields_dict.items.grid; let link_to = row.link_to; + let row_obj = grid.get_grid_row(cdn); if (link_to) { frappe.model.with_doctype(link_to, function () { let meta = frappe.get_meta(link_to); - let row_obj = grid.get_grid_row(cdn); let field_obj = row_obj.get_field("navigate_to_tab"); let tab_fieldnames = meta.fields .filter((field) => field.fieldtype === "Tab Break") @@ -41,3 +41,34 @@ frappe.ui.form.on("Workspace Sidebar Item", { } }, }); + +frappe.ui.form.on("Workspace Sidebar Item", { + form_render(frm, cdt, cdn) { + const row = locals[cdt][cdn]; + let grid = frm.fields_dict.items.grid; + let row_obj = grid.get_grid_row(cdn); + let link_to = row.link_to; + if (!row_obj) return; + grid.update_docfield_property("filters", "hidden", 1); + const field = row_obj.get_field("filter_area"); + if (!field) return; + let filter_group = new frappe.ui.FilterGroup({ + parent: $(field.wrapper), + doctype: link_to, + on_change: () => { + frm.dirty(); + let fieldname = "filters"; + let value = JSON.stringify(filter_group.get_filters()); + frappe.model.set_value(cdt, cdn, fieldname, value); + }, + }); + $(field.wrapper).find(".filter-area").css("margin-bottom", "10px"); + $(field.wrapper) + .find(".filter-area") + .prepend(""); + + if (row.filters) { + filter_group.add_filters_to_filter_group(JSON.parse(row.filters)); + } + }, +}); diff --git a/frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json b/frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json index 335f83e1ad..1cb976a9a9 100644 --- a/frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json +++ b/frappe/desk/doctype/workspace_sidebar_item/workspace_sidebar_item.json @@ -25,6 +25,7 @@ "column_break_jexf", "display_depends_on", "section_break_whjq", + "filter_area", "filters", "route_options" ], @@ -162,13 +163,18 @@ "fieldname": "navigate_to_tab", "fieldtype": "Autocomplete", "label": "Tab" + }, + { + "fieldname": "filter_area", + "fieldtype": "HTML", + "label": "Filter Area" } ], "grid_page_length": 50, "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2025-12-29 17:11:16.069665", + "modified": "2026-01-05 17:51:09.868113", "modified_by": "Administrator", "module": "Desk", "name": "Workspace Sidebar Item", diff --git a/frappe/public/js/frappe/ui/sidebar/sidebar_item.js b/frappe/public/js/frappe/ui/sidebar/sidebar_item.js index cef51e7961..bc11eb3f54 100644 --- a/frappe/public/js/frappe/ui/sidebar/sidebar_item.js +++ b/frappe/public/js/frappe/ui/sidebar/sidebar_item.js @@ -48,11 +48,18 @@ frappe.ui.sidebar_item.TypeLink = class SidebarItem { route_options: JSON.parse(this.item.route_options), }); } else { - path = frappe.utils.generate_route({ + let args = { type: this.item.link_type, name: this.item.link_to, tab: this.item.tab, - }); + }; + if (this.item.filters) { + let filters_json = frappe.utils.get_filter_as_json( + JSON.parse(this.item.filters) + ); + args.filters = filters_json; + } + path = frappe.utils.generate_route(args); } } if (path) {