From 0722222b8de51c6c6a0da3d1a940435155a4c1de Mon Sep 17 00:00:00 2001 From: gajjug004 Date: Wed, 18 Mar 2026 15:44:28 +0530 Subject: [PATCH 1/3] fix: show correct view label in awesomebar for tree-view doctypes --- frappe/boot.py | 1 + frappe/public/js/frappe/ui/toolbar/search_utils.js | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/frappe/boot.py b/frappe/boot.py index 43f9737929..995e21428b 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -68,6 +68,7 @@ def get_bootinfo(): bootinfo.nested_set_doctypes = [ d.parent for d in frappe.get_all("DocField", {"fieldname": "lft"}, ["parent"]) ] + bootinfo.tree_view_doctypes = [d.name for d in frappe.get_all("DocType", {"default_view": "Tree"})] add_home_page(bootinfo, doclist) bootinfo.page_info = get_allowed_pages() load_translations(bootinfo) diff --git a/frappe/public/js/frappe/ui/toolbar/search_utils.js b/frappe/public/js/frappe/ui/toolbar/search_utils.js index 663168cc91..58467c5bcd 100644 --- a/frappe/public/js/frappe/ui/toolbar/search_utils.js +++ b/frappe/public/js/frappe/ui/toolbar/search_utils.js @@ -235,7 +235,14 @@ frappe.search.utils = { }); } - out.push(option("List", ["List", item], 0.05)); + const isTree = (frappe.boot.tree_view_doctypes || []).includes(item); + out.push( + option( + isTree ? "Tree" : "List", + isTree ? ["Tree", item] : ["List", item], + 0.05 + ) + ); if (frappe.model.can_get_report(item)) { out.push(option("Report", ["List", item, "Report"], 0.04)); } From 186a49ad1181825156269c5340cd8636273eb991 Mon Sep 17 00:00:00 2001 From: gajjug004 Date: Thu, 19 Mar 2026 19:04:08 +0530 Subject: [PATCH 2/3] chore: get tree_view_doctypes with caching --- frappe/boot.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/frappe/boot.py b/frappe/boot.py index 995e21428b..ed6c873852 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -26,6 +26,7 @@ from frappe.query_builder import DocType from frappe.query_builder.functions import Count from frappe.query_builder.terms import ParameterizedValueWrapper, SubQuery from frappe.utils import add_user_info, cstr, get_system_timezone +from frappe.utils.caching import redis_cache from frappe.utils.change_log import get_versions from frappe.utils.frappecloud import on_frappecloud from frappe.website.doctype.web_page_view.web_page_view import is_tracking_enabled @@ -65,10 +66,8 @@ def get_bootinfo(): bootinfo.module_app = frappe.local.module_app bootinfo.single_types = [d.name for d in frappe.get_all("DocType", {"issingle": 1})] - bootinfo.nested_set_doctypes = [ - d.parent for d in frappe.get_all("DocField", {"fieldname": "lft"}, ["parent"]) - ] - bootinfo.tree_view_doctypes = [d.name for d in frappe.get_all("DocType", {"default_view": "Tree"})] + bootinfo.nested_set_doctypes = frappe.get_all("DocField", {"fieldname": "lft"}, pluck="parent") + bootinfo.tree_view_doctypes = get_tree_view_doctypes() add_home_page(bootinfo, doclist) bootinfo.page_info = get_allowed_pages() load_translations(bootinfo) @@ -523,6 +522,11 @@ def get_marketplace_apps(): return apps +@redis_cache +def get_tree_view_doctypes(): + return frappe.get_all("DocType", {"default_view": "Tree"}, pluck="name") + + def add_subscription_conf(): try: return frappe.conf.subscription From 041a59efe74fef70138725bb828796828aac3ff8 Mon Sep 17 00:00:00 2001 From: AarDG10 Date: Thu, 19 Mar 2026 20:03:10 +0530 Subject: [PATCH 3/3] refactor(boot): use pluck in get_all --- frappe/boot.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frappe/boot.py b/frappe/boot.py index ed6c873852..db0bd008c7 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -61,11 +61,11 @@ def get_bootinfo(): bootinfo.desktop_icons = get_desktop_icons(bootinfo=bootinfo) bootinfo.letter_heads = get_letter_heads() bootinfo.active_domains = frappe.get_active_domains() - bootinfo.all_domains = [d.get("name") for d in frappe.get_all("Domain")] + bootinfo.all_domains = frappe.get_all("Domain", pluck="name") add_layouts(bootinfo) bootinfo.module_app = frappe.local.module_app - bootinfo.single_types = [d.name for d in frappe.get_all("DocType", {"issingle": 1})] + bootinfo.single_types = frappe.get_all("DocType", {"issingle": 1}, pluck="name") bootinfo.nested_set_doctypes = frappe.get_all("DocField", {"fieldname": "lft"}, pluck="parent") bootinfo.tree_view_doctypes = get_tree_view_doctypes() add_home_page(bootinfo, doclist) @@ -217,7 +217,7 @@ def load_desktop_data(bootinfo): app_logo_url=app_info.get("logo") or frappe.get_hooks("app_logo_url", app_name=app_name) or frappe.get_hooks("app_logo_url", app_name="frappe"), - modules=[m.name for m in frappe.get_all("Module Def", dict(app_name=app_name))], + modules=frappe.get_all("Module Def", dict(app_name=app_name), pluck="name"), workspaces=workspaces, ) ) @@ -409,7 +409,7 @@ def get_success_action(): def get_link_preview_doctypes(): from frappe.utils import cint - link_preview_doctypes = [d.name for d in frappe.get_all("DocType", {"show_preview_popup": 1})] + link_preview_doctypes = frappe.get_all("DocType", {"show_preview_popup": 1}, pluck="name") customizations = frappe.get_all( "Property Setter", fields=["doc_type", "value"], filters={"property": "show_preview_popup"} )