commonify parse_validate_and_set_in_modal, onchange in df (#3540)
This commit is contained in:
parent
64262dc635
commit
283f67d752
3 changed files with 54 additions and 103 deletions
|
|
@ -100,7 +100,7 @@ frappe.ui.form.Control = Class.extend({
|
|||
set_value: function(value) {
|
||||
this.parse_validate_and_set_in_model(value);
|
||||
},
|
||||
parse_validate_and_set_in_model: function(value) {
|
||||
parse_validate_and_set_in_model: function(value, e) {
|
||||
var me = this;
|
||||
if(this.inside_change_event) return;
|
||||
this.inside_change_event = true;
|
||||
|
|
@ -110,6 +110,11 @@ frappe.ui.form.Control = Class.extend({
|
|||
me.set_model_value(value);
|
||||
me.inside_change_event = false;
|
||||
me.set_mandatory && me.set_mandatory(value);
|
||||
|
||||
if(me.df.change || me.df.onchange) {
|
||||
// onchange event specified in df
|
||||
(me.df.change || me.df.onchange).apply(me, [e]);
|
||||
}
|
||||
}
|
||||
|
||||
this.validate ? this.validate(value, set) : set(value);
|
||||
|
|
@ -333,39 +338,8 @@ frappe.ui.form.ControlInput = frappe.ui.form.Control.extend({
|
|||
|
||||
bind_change_event: function() {
|
||||
var me = this;
|
||||
|
||||
this.$input && this.$input.on("change", this.change || function(e) {
|
||||
if(me.df.change || me.df.onchange) {
|
||||
// onchange event specified in df
|
||||
(me.df.change || me.df.onchange).apply(this, [e]);
|
||||
return;
|
||||
}
|
||||
if(me.doctype && me.docname && me.get_value) {
|
||||
me.parse_validate_and_set_in_model(me.get_value());
|
||||
} else {
|
||||
// inline
|
||||
var value = me.get_value();
|
||||
var parsed = me.parse ? me.parse(value) : value;
|
||||
var set_input = function(before, after) {
|
||||
if(before !== after) {
|
||||
me.set_input(after);
|
||||
}
|
||||
if(me.doc) {
|
||||
me.doc[me.df.fieldname] = value;
|
||||
}
|
||||
me.set_mandatory && me.set_mandatory(after);
|
||||
if(me.after_validate) {
|
||||
me.after_validate(after, me.$input);
|
||||
}
|
||||
}
|
||||
if(me.validate) {
|
||||
me.validate(parsed, function(validated) {
|
||||
set_input(value, validated);
|
||||
});
|
||||
} else {
|
||||
set_input(value, parsed);
|
||||
}
|
||||
}
|
||||
me.parse_validate_and_set_in_model(me.get_value(), e);
|
||||
});
|
||||
},
|
||||
bind_focusout: function() {
|
||||
|
|
@ -1430,22 +1404,8 @@ frappe.ui.form.ControlLink = frappe.ui.form.ControlData.extend({
|
|||
return;
|
||||
}
|
||||
var value = me.get_value();
|
||||
if(me.doctype && me.docname) {
|
||||
if(value!==me.last_value) {
|
||||
me.parse_validate_and_set_in_model(value);
|
||||
}
|
||||
} else {
|
||||
var cache_list = me.$input.cache[me.get_options()];
|
||||
if (cache_list && cache_list[""]) {
|
||||
var docs = cache_list[""].map(item => item.label);
|
||||
if(docs.includes(value)) {
|
||||
me.set_mandatory(value);
|
||||
} else {
|
||||
me.$input.val("");
|
||||
}
|
||||
} else {
|
||||
me.$input.val(value);
|
||||
}
|
||||
if(value!==me.last_value) {
|
||||
me.parse_validate_and_set_in_model(value);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -1487,17 +1447,7 @@ frappe.ui.form.ControlLink = frappe.ui.form.ControlData.extend({
|
|||
frappe.boot.user.last_selected_values[me.df.options] = item.value;
|
||||
}
|
||||
|
||||
if(me.frm && me.frm.doc) {
|
||||
me.selected = true;
|
||||
me.parse_validate_and_set_in_model(item.value);
|
||||
setTimeout(function() {
|
||||
me.selected = false;
|
||||
}, 100);
|
||||
} else {
|
||||
me.$input.val(item.value);
|
||||
me.$input.trigger("change");
|
||||
me.set_mandatory(item.value);
|
||||
}
|
||||
me.parse_validate_and_set_in_model(item.value);
|
||||
});
|
||||
|
||||
this.$input.on("awesomplete-selectcomplete", function(e) {
|
||||
|
|
@ -1585,11 +1535,49 @@ frappe.ui.form.ControlLink = frappe.ui.form.ControlData.extend({
|
|||
return;
|
||||
}
|
||||
|
||||
if(this.frm) {
|
||||
this.frm.script_manager.validate_link_and_fetch(this.df, this.get_options(),
|
||||
this.docname, value, callback);
|
||||
this.validate_link_and_fetch(this.df, this.get_options(),
|
||||
this.docname, value, callback);
|
||||
},
|
||||
validate_link_and_fetch: function(df, doctype, docname, value, callback) {
|
||||
var me = this;
|
||||
|
||||
if(value) {
|
||||
var fetch = '';
|
||||
|
||||
if(this.frm && this.frm.fetch_dict[df.fieldname]) {
|
||||
fetch = this.frm.fetch_dict[df.fieldname].columns.join(', ');
|
||||
}
|
||||
|
||||
return frappe.call({
|
||||
method:'frappe.desk.form.utils.validate_link',
|
||||
type: "GET",
|
||||
args: {
|
||||
'value': value,
|
||||
'options': doctype,
|
||||
'fetch': fetch
|
||||
},
|
||||
no_spinner: true,
|
||||
callback: function(r) {
|
||||
if(r.message=='Ok') {
|
||||
if(r.fetch_values && docname) {
|
||||
me.set_fetch_values(df, docname, r.fetch_values);
|
||||
}
|
||||
if(callback) callback(r.valid_value);
|
||||
} else {
|
||||
if(callback) callback("");
|
||||
}
|
||||
}
|
||||
});
|
||||
} else if(callback) {
|
||||
callback(value);
|
||||
}
|
||||
},
|
||||
set_fetch_values: function(df, docname, fetch_values) {
|
||||
var fl = this.frm.fetch_dict[df.fieldname].fields;
|
||||
for(var i=0; i < fl.length; i++) {
|
||||
frappe.model.set_value(df.parent, docname, fl[i], fetch_values[i], df.fieldtype);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if(Awesomplete) {
|
||||
|
|
|
|||
|
|
@ -169,7 +169,7 @@ frappe.ui.form.Grid = Class.extend({
|
|||
this.truncate_rows(data);
|
||||
this.grid_rows_by_docname = {};
|
||||
|
||||
for(var ri=0;ri < data.length; ri++) {
|
||||
for(var ri=0; ri < data.length; ri++) {
|
||||
var d = data[ri];
|
||||
|
||||
if(d.idx===undefined) {
|
||||
|
|
@ -951,7 +951,6 @@ frappe.ui.form.GridRow = Class.extend({
|
|||
parent = column.field_area,
|
||||
df = column.df;
|
||||
|
||||
|
||||
// no text editor in grid
|
||||
if (df.fieldtype=='Text Editor') {
|
||||
df.fieldtype = 'Text';
|
||||
|
|
@ -966,6 +965,8 @@ frappe.ui.form.GridRow = Class.extend({
|
|||
doctype: this.doc.doctype,
|
||||
docname: this.doc.name,
|
||||
frm: this.grid.frm,
|
||||
grid: this.grid,
|
||||
grid_row: this,
|
||||
value: this.doc[df.fieldname]
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -150,44 +150,6 @@ frappe.ui.form.ScriptManager = Class.extend({
|
|||
console.log("----- end of error message -----");
|
||||
console.group && console.groupEnd();
|
||||
},
|
||||
validate_link_and_fetch: function(df, doctype, docname, value, callback) {
|
||||
var me = this;
|
||||
|
||||
if(value) {
|
||||
var fetch = '';
|
||||
|
||||
if(this.frm && this.frm.fetch_dict[df.fieldname])
|
||||
fetch = this.frm.fetch_dict[df.fieldname].columns.join(', ');
|
||||
|
||||
return frappe.call({
|
||||
method:'frappe.desk.form.utils.validate_link',
|
||||
type: "GET",
|
||||
args: {
|
||||
'value': value,
|
||||
'options': doctype,
|
||||
'fetch': fetch
|
||||
},
|
||||
no_spinner: true,
|
||||
callback: function(r) {
|
||||
if(r.message=='Ok') {
|
||||
if(r.fetch_values)
|
||||
me.set_fetch_values(df, docname, r.fetch_values);
|
||||
if(callback) callback(r.valid_value);
|
||||
} else {
|
||||
if(callback) callback("");
|
||||
}
|
||||
}
|
||||
});
|
||||
} else if(callback) {
|
||||
callback(value);
|
||||
}
|
||||
},
|
||||
set_fetch_values: function(df, docname, fetch_values) {
|
||||
var fl = this.frm.fetch_dict[df.fieldname].fields;
|
||||
for(var i=0; i < fl.length; i++) {
|
||||
frappe.model.set_value(df.parent, docname, fl[i], fetch_values[i], df.fieldtype);
|
||||
}
|
||||
},
|
||||
copy_from_first_row: function(parentfield, current_row, fieldnames) {
|
||||
var data = this.frm.doc[parentfield];
|
||||
if(data.length===1 || data[0]===current_row) return;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue