refactor: setting input value for link fields
This commit is contained in:
parent
c589f36635
commit
b4212ad05f
2 changed files with 27 additions and 51 deletions
|
|
@ -89,7 +89,7 @@ def get_bootinfo():
|
|||
bootinfo.additional_filters_config = get_additional_filters_from_hooks()
|
||||
bootinfo.desk_settings = get_desk_settings()
|
||||
bootinfo.app_logo_url = get_app_logo()
|
||||
bootinfo.doctypes_with_show_link_field_title = doctypes_with_show_link_field_title()
|
||||
bootinfo.link_title_doctypes = get_link_title_doctypes()
|
||||
|
||||
return bootinfo
|
||||
|
||||
|
|
@ -328,7 +328,7 @@ def get_desk_settings():
|
|||
def get_notification_settings():
|
||||
return frappe.get_cached_doc('Notification Settings', frappe.session.user)
|
||||
|
||||
def doctypes_with_show_link_field_title():
|
||||
def get_link_title_doctypes():
|
||||
dts = frappe.get_all("DocType", {"show_title_field_in_link": 1})
|
||||
custom_dts = frappe.get_all("Property Setter", {"field_name": "show_title_field_in_link", "value": 1})
|
||||
return [d.name for d in dts + custom_dts if d]
|
||||
|
|
|
|||
|
|
@ -74,17 +74,32 @@ frappe.ui.form.ControlLink = class ControlLink extends frappe.ui.form.ControlDat
|
|||
set_formatted_input(value) {
|
||||
super.set_formatted_input();
|
||||
if (!value) return;
|
||||
let doctype = this.get_options();
|
||||
this.set_data_value(frappe.utils.get_link_title(doctype, value) || value, value);
|
||||
}
|
||||
set_data_value(link_display, value) {
|
||||
if (!this.$input) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.$input.val(link_display);
|
||||
this.set_link_title(value);
|
||||
this.data_value = value;
|
||||
}
|
||||
set_link_title(value) {
|
||||
let doctype = this.get_options();
|
||||
|
||||
if (!doctype) return;
|
||||
if (!in_list(frappe.boot.link_title_doctypes, doctype)) return;
|
||||
|
||||
let link_title = frappe.utils.get_link_title(doctype, value);
|
||||
if (!link_title) {
|
||||
frappe.xcall("frappe.desk.search.get_link_title", {
|
||||
"doctype": doctype,
|
||||
"docname": value
|
||||
}).then(link_title => {
|
||||
if (link_title && value !== link_title) {
|
||||
this.set_input_value(link_title);
|
||||
} else {
|
||||
this.set_input_value(value);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
this.set_input_value(link_title);
|
||||
}
|
||||
}
|
||||
parse_validate_and_set_in_model(value, label, e) {
|
||||
if (this.parse) value = this.parse(value, label);
|
||||
if (label) {
|
||||
|
|
@ -94,53 +109,14 @@ frappe.ui.form.ControlLink = class ControlLink extends frappe.ui.form.ControlDat
|
|||
|
||||
return this.validate_and_set_in_model(value, e);
|
||||
}
|
||||
validate_and_set_in_model(value, e) {
|
||||
var me = this;
|
||||
let force_value_set = (this.doc && this.doc.__run_link_triggers);
|
||||
let is_value_same = (this.get_model_value() === value);
|
||||
|
||||
if (this.inside_change_event || (!force_value_set && is_value_same)) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
this.inside_change_event = true;
|
||||
function set(value) {
|
||||
me.inside_change_event = false;
|
||||
return frappe.run_serially([
|
||||
() => me._validated = true,
|
||||
() => me.set_model_value(value),
|
||||
() => delete me._validated,
|
||||
() => {
|
||||
me.set_mandatory && me.set_mandatory(value);
|
||||
|
||||
if(me.df.change || me.df.onchange) {
|
||||
// onchange event specified in df
|
||||
frappe.utils.set_link_title(me);
|
||||
let set = (me.df.change || me.df.onchange).apply(me, [e]);
|
||||
me.set_invalid && me.set_invalid();
|
||||
return set;
|
||||
}
|
||||
me.set_invalid && me.set_invalid();
|
||||
}
|
||||
]);
|
||||
};
|
||||
value = this.validate(value);
|
||||
if (value && value.then) {
|
||||
// got a promise
|
||||
return value.then((value) => set(value));
|
||||
} else {
|
||||
// all clear
|
||||
return set(value);
|
||||
}
|
||||
}
|
||||
get_input_value() {
|
||||
return (this.$input && this.data_value && this.$input.val()) ? this.data_value : "";
|
||||
}
|
||||
get_label_value() {
|
||||
return this.$input ? this.$input.val() : "";
|
||||
}
|
||||
set_input_label(label) {
|
||||
this.$input && this.$input.val(label);
|
||||
set_input_value(value) {
|
||||
this.$input && this.$input.val(value);
|
||||
}
|
||||
reset_value() {
|
||||
if (!this.$input) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue