From e152fa579ddf930f660f4ea5f02ac76447967165 Mon Sep 17 00:00:00 2001 From: RitvikSardana Date: Thu, 14 Mar 2024 23:15:46 +0530 Subject: [PATCH] feat: add eval support for link field filters --- frappe/public/js/form_builder/components/Field.vue | 6 +----- frappe/public/js/frappe/form/form.js | 8 +++++++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/frappe/public/js/form_builder/components/Field.vue b/frappe/public/js/form_builder/components/Field.vue index 7e5ab99fa3..a4e2f79468 100644 --- a/frappe/public/js/form_builder/components/Field.vue +++ b/frappe/public/js/form_builder/components/Field.vue @@ -97,6 +97,7 @@ function make_dialog(frm) { }); props.field.df.link_filters = JSON.stringify(filters); + store.form.selected_field = props.field.df; frm.dialog.hide(); }, primary_action_label: __("Apply"), @@ -133,11 +134,6 @@ function make_dialog(frm) { } }); } - - // Setting selected field in store because when we click on the dialog the selected field is set to null - frm.dialog.$wrapper.on("click", () => { - store.form.selected_field = props.field.df; - }); } function make_filter_area(frm, doctype) { diff --git a/frappe/public/js/frappe/form/form.js b/frappe/public/js/frappe/form/form.js index 69a7c6e366..2d9afa7c7a 100644 --- a/frappe/public/js/frappe/form/form.js +++ b/frappe/public/js/frappe/form/form.js @@ -292,13 +292,19 @@ frappe.ui.form.Form = class FrappeForm { for (const d of data) { for (const condition of d) { let [doctype, field, operator, value] = condition; + if (value.includes("eval")) { + // if condition type of 'like' is used then remove % from value + value = value.replace(/%/g, ""); + // get the value to calculate + value = value.split("eval:")[1]; + value = frappe.utils.eval(value, { doc: this.doc, frappe }); + } doctype = doctype.fieldname; if (!parsed_data[doctype]) { parsed_data[doctype] = { filters: {}, }; } - if (!parsed_data[doctype].filters[field]) { parsed_data[doctype].filters[field] = [operator, value]; }