From 32d78128a713748671214c068dfa8707c24bbf5b Mon Sep 17 00:00:00 2001 From: Suraj Shetty Date: Tue, 18 Feb 2025 19:20:03 +0530 Subject: [PATCH] fix: Add builder page filter to replace component feature --- .../builder_settings/builder_settings.js | 20 +++++++++++++++++++ .../builder_settings/builder_settings.py | 6 ++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/builder/builder/doctype/builder_settings/builder_settings.js b/builder/builder/doctype/builder_settings/builder_settings.js index b2f079ec..94319fc9 100644 --- a/builder/builder/doctype/builder_settings/builder_settings.js +++ b/builder/builder/doctype/builder_settings/builder_settings.js @@ -9,10 +9,17 @@ frappe.ui.form.on("Builder Settings", { "builder.builder.doctype.builder_settings.builder_settings.get_components", callback: (r) => { const components = r.message; + let filter_group = null; // modal to select target component and component to replace with const d = new frappe.ui.Dialog({ title: __("Replace Component"), fields: [ + { + fieldtype: "HTML", + fieldname: "filter_area", + label: "Builder Page Filter", + description: "Limits the pages where the component is replaced", + }, { fieldname: "target_component", label: __("Target Component"), @@ -25,6 +32,7 @@ frappe.ui.form.on("Builder Settings", { "builder.builder.doctype.builder_settings.builder_settings.get_component_usage_count", args: { component_id: this.get_value(), + filters: filter_group?.get_filters(), }, callback: (r) => { const field = d.get_field("target_component"); @@ -50,6 +58,17 @@ frappe.ui.form.on("Builder Settings", { ], }); + frappe.model.with_doctype("Builder Page", () => { + filter_group = new frappe.ui.FilterGroup({ + parent: d.get_field("filter_area").$wrapper, + doctype: "Builder Page", + on_change: () => {}, + }); + filter_group.wrapper.prepend( + "
Filter Builder Pages

Limits the pages where the component is replaced


", + ); + filter_group.wrapper.append("

"); + }); d.set_primary_action(__("Replace"), (values) => { frappe.confirm( __("Are you sure you want to replace {0} with {1}?", [ @@ -63,6 +82,7 @@ frappe.ui.form.on("Builder Settings", { args: { target_component: values.target_component, replace_with: values.replace_with, + filters: filter_group.get_filters(), }, callback: (r) => { frappe.msgprint(__("Component replaced successfully")); diff --git a/builder/builder/doctype/builder_settings/builder_settings.py b/builder/builder/doctype/builder_settings/builder_settings.py index 75952ca1..01cb006a 100644 --- a/builder/builder/doctype/builder_settings/builder_settings.py +++ b/builder/builder/doctype/builder_settings/builder_settings.py @@ -57,7 +57,7 @@ def get_components(): @frappe.whitelist() -def replace_component(target_component: str, replace_with: str): +def replace_component(target_component: str, replace_with: str, filters=None): if not target_component or not replace_with: return # check permissions @@ -72,6 +72,7 @@ def replace_component(target_component: str, replace_with: str): pages = frappe.get_all( "Builder Page", fields=["name"], + filters=filters, or_filters={ "blocks": ["like", f"%{target_component}%"], "draft_blocks": ["like", f"%{target_component}%"], @@ -83,10 +84,11 @@ def replace_component(target_component: str, replace_with: str): @frappe.whitelist() -def get_component_usage_count(component_id: str): +def get_component_usage_count(component_id: str, filters=None): return len( frappe.get_all( "Builder Page", + filters=filters, or_filters={ "blocks": ["like", f"%{component_id}%"], "draft_blocks": ["like", f"%{component_id}%"],