From a096b85b52b84a26e9610c4c561f7d708eb2dd86 Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Thu, 7 Apr 2022 12:23:41 +0530 Subject: [PATCH] fix: Read Only fields visible despite no value --- .../js/frappe/form/controls/base_control.js | 16 ++++++++++++---- frappe/public/js/frappe/form/controls/control.js | 1 - frappe/public/js/frappe/form/controls/data.js | 2 ++ .../public/js/frappe/form/controls/read_only.js | 8 -------- frappe/public/js/frappe/model/perm.js | 7 +++++-- frappe/public/js/frappe/ui/field_group.js | 13 ++++++------- 6 files changed, 25 insertions(+), 22 deletions(-) delete mode 100644 frappe/public/js/frappe/form/controls/read_only.js diff --git a/frappe/public/js/frappe/form/controls/base_control.js b/frappe/public/js/frappe/form/controls/base_control.js index 4ee52d16b8..e22235f60f 100644 --- a/frappe/public/js/frappe/form/controls/base_control.js +++ b/frappe/public/js/frappe/form/controls/base_control.js @@ -44,6 +44,8 @@ frappe.ui.form.Control = class BaseControl { } if ((!this.doctype && !this.docname) || this.df.parenttype === 'Web Form' || this.df.is_web_form) { + let status = "Write"; + // like in case of a dialog box if (cint(this.df.hidden)) { // eslint-disable-next-line @@ -55,10 +57,10 @@ frappe.ui.form.Control = class BaseControl { if(explain) console.log("By Hidden Dependency: None"); // eslint-disable-line no-console return "None"; - } else if (cint(this.df.read_only || this.df.is_virtual)) { + } else if (cint(this.df.read_only || this.df.is_virtual || this.df.fieldtype === "Read Only")) { // eslint-disable-next-line if (explain) console.log("By Read Only: Read"); // eslint-disable-line no-console - return "Read"; + status = "Read"; } else if ((this.grid && this.grid.display_status == 'Read') || @@ -67,10 +69,16 @@ frappe.ui.form.Control = class BaseControl { this.layout.grid.display_status == 'Read')) { // parent grid is read if (explain) console.log("By Parent Grid Read-only: Read"); // eslint-disable-line no-console - return "Read"; + status = "Read"; } - return "Write"; + if ( + status === "Read" && + is_null(this.value) && + !in_list(["HTML", "Image", "Button"], this.df.fieldtype) + ) status = "None"; + + return status; } var status = frappe.perm.get_field_display_status(this.df, diff --git a/frappe/public/js/frappe/form/controls/control.js b/frappe/public/js/frappe/form/controls/control.js index bd04938e35..90e8697b1c 100644 --- a/frappe/public/js/frappe/form/controls/control.js +++ b/frappe/public/js/frappe/form/controls/control.js @@ -23,7 +23,6 @@ import './table'; import './color'; import './signature'; import './password'; -import './read_only'; import './button'; import './html'; import './markdown_editor'; diff --git a/frappe/public/js/frappe/form/controls/data.js b/frappe/public/js/frappe/form/controls/data.js index f4c9849528..95abba616a 100644 --- a/frappe/public/js/frappe/form/controls/data.js +++ b/frappe/public/js/frappe/form/controls/data.js @@ -262,3 +262,5 @@ frappe.ui.form.ControlData = class ControlData extends frappe.ui.form.ControlInp return this.grid || this.layout && this.layout.grid; } }; + +frappe.ui.form.ControlReadOnly = frappe.ui.form.ControlData; diff --git a/frappe/public/js/frappe/form/controls/read_only.js b/frappe/public/js/frappe/form/controls/read_only.js deleted file mode 100644 index 2f1d1a2bca..0000000000 --- a/frappe/public/js/frappe/form/controls/read_only.js +++ /dev/null @@ -1,8 +0,0 @@ -frappe.ui.form.ControlReadOnly = class ControlReadOnly extends frappe.ui.form.ControlData { - get_status(explain) { - var status = super.get_status(explain); - if(status==="Write") - status = "Read"; - return; - } -}; diff --git a/frappe/public/js/frappe/model/perm.js b/frappe/public/js/frappe/model/perm.js index 0eabfdd337..3ea9c6bc95 100644 --- a/frappe/public/js/frappe/model/perm.js +++ b/frappe/public/js/frappe/model/perm.js @@ -225,7 +225,10 @@ $.extend(frappe.perm, { if (explain) console.log("By Workflow:" + status); // read only field is checked - if (status === "Write" && cint(df.read_only)) { + if (status === "Write" && ( + cint(df.read_only) || + df.fieldtype === "Read Only" + )) { status = "Read"; } if (explain) console.log("By Read Only:" + status); @@ -276,4 +279,4 @@ $.extend(frappe.perm, { return allowed_docs; } } -}); \ No newline at end of file +}); diff --git a/frappe/public/js/frappe/ui/field_group.js b/frappe/public/js/frappe/ui/field_group.js index 1936f5115e..479c020fbb 100644 --- a/frappe/public/js/frappe/ui/field_group.js +++ b/frappe/public/js/frappe/ui/field_group.js @@ -22,17 +22,15 @@ frappe.ui.FieldGroup = class FieldGroup extends frappe.ui.form.Layout { super.make(); this.refresh(); // set default - $.each(this.fields_list, function(i, field) { - if (field.df["default"]) { - let def_value = field.df["default"]; + $.each(this.fields_list, (_, field) => { + if (!is_null(field.df.default)) { + let def_value = field.df.default; - if (def_value == 'Today' && field.df["fieldtype"] == 'Date') { + if (def_value === "Today" && field.df.fieldtype === "Date") { def_value = frappe.datetime.get_today(); } - field.set_input(def_value); - // if default and has depends_on, render its fields. - me.refresh_dependency(); + this.set_value(field.df.fieldname, def_value); } }) @@ -129,6 +127,7 @@ frappe.ui.FieldGroup = class FieldGroup extends frappe.ui.form.Layout { if (f) { f.set_value(val).then(() => { f.set_input(val); + f.refresh(); this.refresh_dependency(); resolve(); });