From 53974ff1a640130340bb46213865f9527d3a1c1c Mon Sep 17 00:00:00 2001 From: Saqib Ansari Date: Wed, 25 Nov 2020 14:13:21 +0530 Subject: [PATCH 1/4] fix: grid infinte loop while evaluating depends on --- frappe/public/js/frappe/form/form.js | 4 +++- frappe/public/js/frappe/form/layout.js | 11 +++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/frappe/public/js/frappe/form/form.js b/frappe/public/js/frappe/form/form.js index bb9e8c22d1..9272d1f6f5 100644 --- a/frappe/public/js/frappe/form/form.js +++ b/frappe/public/js/frappe/form/form.js @@ -1275,7 +1275,9 @@ frappe.ui.form.Form = class FrappeForm { } if (df && df[property] != value) { df[property] = value; - this.refresh_field(fieldname); + if (!docname || !table_field) { + this.refresh_field(fieldname); + } } } diff --git a/frappe/public/js/frappe/form/layout.js b/frappe/public/js/frappe/form/layout.js index 3505cf4857..6c94663802 100644 --- a/frappe/public/js/frappe/form/layout.js +++ b/frappe/public/js/frappe/form/layout.js @@ -508,9 +508,16 @@ frappe.ui.form.Layout = Class.extend({ } if (form_obj) { if (this.doc && this.doc.parent) { - form_obj.set_df_property(this.doc.parentfield, property, value, this.doc.parent, fieldname); + const df = form_obj.get_docfield(this.doc.parentfield, fieldname); + if (df && df[property] != value) { + form_obj.set_df_property(this.doc.parentfield, property, value, this.doc.parent, fieldname); + this.fields_dict[fname] && this.fields_dict[fieldname].refresh(); + } } else { - form_obj.set_df_property(fieldname, property, value); + const df = form_obj.get_docfield(fieldname); + if (df && df[property] != value) { + form_obj.set_df_property(fieldname, property, value); + } } } }, From 05770275b0292ebf37e175cd99503de69cfc43ec Mon Sep 17 00:00:00 2001 From: Saqib Ansari Date: Mon, 21 Dec 2020 12:33:15 +0530 Subject: [PATCH 2/4] chore: remove unwanted conditions --- frappe/public/js/frappe/form/layout.js | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/frappe/public/js/frappe/form/layout.js b/frappe/public/js/frappe/form/layout.js index 6c94663802..25b83bc0b0 100644 --- a/frappe/public/js/frappe/form/layout.js +++ b/frappe/public/js/frappe/form/layout.js @@ -508,16 +508,10 @@ frappe.ui.form.Layout = Class.extend({ } if (form_obj) { if (this.doc && this.doc.parent) { - const df = form_obj.get_docfield(this.doc.parentfield, fieldname); - if (df && df[property] != value) { - form_obj.set_df_property(this.doc.parentfield, property, value, this.doc.parent, fieldname); - this.fields_dict[fname] && this.fields_dict[fieldname].refresh(); - } + form_obj.set_df_property(this.doc.parentfield, property, value, this.doc.parent, fieldname); + this.fields_dict[fname] && this.fields_dict[fieldname].refresh(); } else { - const df = form_obj.get_docfield(fieldname); - if (df && df[property] != value) { - form_obj.set_df_property(fieldname, property, value); - } + form_obj.set_df_property(fieldname, property, value); } } }, From 4f9edffed82c5fec3c5c6351687560c6dc35f696 Mon Sep 17 00:00:00 2001 From: Saqib Ansari Date: Mon, 21 Dec 2020 13:16:29 +0530 Subject: [PATCH 3/4] fix: fname is not defined --- frappe/public/js/frappe/form/layout.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/form/layout.js b/frappe/public/js/frappe/form/layout.js index 25b83bc0b0..c96c487f3d 100644 --- a/frappe/public/js/frappe/form/layout.js +++ b/frappe/public/js/frappe/form/layout.js @@ -509,7 +509,7 @@ frappe.ui.form.Layout = Class.extend({ if (form_obj) { if (this.doc && this.doc.parent) { form_obj.set_df_property(this.doc.parentfield, property, value, this.doc.parent, fieldname); - this.fields_dict[fname] && this.fields_dict[fieldname].refresh(); + this.fields_dict[fieldname] && this.fields_dict[fieldname].refresh(); } else { form_obj.set_df_property(fieldname, property, value); } From 5d56b36e18b3e756a3ec59b61bdb4cf55a808c69 Mon Sep 17 00:00:00 2001 From: Saqib Ansari Date: Mon, 21 Dec 2020 13:16:41 +0530 Subject: [PATCH 4/4] chore: add comments --- frappe/public/js/frappe/form/form.js | 1 + frappe/public/js/frappe/form/layout.js | 1 + 2 files changed, 2 insertions(+) diff --git a/frappe/public/js/frappe/form/form.js b/frappe/public/js/frappe/form/form.js index 9272d1f6f5..fc348704fa 100644 --- a/frappe/public/js/frappe/form/form.js +++ b/frappe/public/js/frappe/form/form.js @@ -1276,6 +1276,7 @@ frappe.ui.form.Form = class FrappeForm { if (df && df[property] != value) { df[property] = value; if (!docname || !table_field) { + // do not refresh childtable fields since `this.fields_dict` doesn't have child table fields this.refresh_field(fieldname); } } diff --git a/frappe/public/js/frappe/form/layout.js b/frappe/public/js/frappe/form/layout.js index c96c487f3d..22c885e0cb 100644 --- a/frappe/public/js/frappe/form/layout.js +++ b/frappe/public/js/frappe/form/layout.js @@ -509,6 +509,7 @@ frappe.ui.form.Layout = Class.extend({ if (form_obj) { if (this.doc && this.doc.parent) { form_obj.set_df_property(this.doc.parentfield, property, value, this.doc.parent, fieldname); + // refresh child fields this.fields_dict[fieldname] && this.fields_dict[fieldname].refresh(); } else { form_obj.set_df_property(fieldname, property, value);